Русский
Русский
English
Статистика
Реклама

Все категории

Миф про мобильный CHACHA20

02.03.2021 14:06:25 | Автор: admin

При подготовке Методики расчета Индекса надежности HTTPS мы перерыли массу тематической литературы и не раз сталкивались с рекомендацией поддерживать на веб-сервере шифронаборы на основе алгоритма шифрования CHACHA20 в целях снижения нагрузки на мобильные клиенты, которые не умеют в аппаратный AES. В этом контексте обычно упоминались процессоры Mediatek и скопом старые бюджетные мобильные процессоры.

Действительно ли CHACHA20 со своим верным спутником POLY1305 позволяют не слишком греться мобильным клиентам и стоит ли его поддерживать на веб-сервере? Давайте это обсудим!

CHACHA20 был создан известным специалистом по криптографии Дэниэлом Бернштейном, которого мы любим, в частности, за Curve25519, а также за правозащитную деятельность, благодаря которой только олдфаги помнят, что означало _EXPORT_ в имени шифронабора. Алгоритм неплохо изучен, работает в AEAD-режиме, не имеет известных слабостей и уязвимостей, и является одним из двух алгоритмов шифрования, одобренных IETF для использования в TLS 1.3 (второй бессмертный AES).

Его теоретическая криптостойкость при использовании в TLS оценивается по-разному, в интервале между AES-128 и AES-256 в режиме GCM, что считается достаточным по сегодняшним меркам и на обозримую перспективу. При этом отмечается, что CHACHA20 быстрее AES, т.е. потребляет меньше процессорных ресурсов на обеспечение того же уровня криптостойкости. Эта формулировка не только отдает душком телемаркетинга (при всем уважении к ее автору), но и упускает важную деталь: на процессорах без аппаратной поддержки AES.

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

Intel представил поддержку AES-NI в 2010 году в процессорах архитектуры Westmere, причем далеко не во всех: Atom, Celeron, Pentium и Core i3 она еще долго не полагалась. В поддержке AES-NI без копания в спецификациях можно быть уверенным только начиная с архитектуры Goldmont (Apollo Lake и Denverton), а это уже 2016 год.

У AMD это архитектуры Bulldozer (2011) и Jaguar (2013 год), с ARM все сложнее: поддержка AES-инструкций предусмотрена в архитектуре ARMv8-A (2011 год, первое устройство 2013 год), но фактическое воплощение их в кремнии зависит от производителя процессора и я лично не стал бы так уверенно свистеть про старые бюджетные мобильные процессоры, скорее стоит говорить о не флагманских мобильных процессорах вообще, в т.ч. выпускаемых поныне.

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

Ситуация меняется на прямо противоположную, когда речь заходит о процессорах с поддержкой AES. Вряд ли стоит винить в этом CHACHA20, которому никто не предложил персональный набор инструкций в процессоре, а что бывает, когда оба участника играют по одним правилам, мы видели на старых процессорах (напоминаю: AES сливает).

Так что, дружно включаем поддержку CHACHA20 на веб-серверах? Почему бы и нет, хотя бы из того соображения, что все яйца в одну корзину не кладут, и если вдруг завтра в самом AES или его реализации в конкретной криптобиблиотеке найдут дыру, мы легким движением руки сможем отключить его до выяснения, оставшись на CHACHA20, а не судорожно искать, чем заменить AES, да как это включается.

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

Давайте вспомним, как вообще происходит согласование шифронабора при установлении HTTPS-соединения: клиент передает серверу список поддерживаемых им шифронаборов, в порядке от балды и изменить этот порядок можно только через групповые политики Windows и только для Internet Explorer браузеров, использующих SChannel (поправьте, если ошибаюсь). Сервер сравнивает полученный от клиента список со списком поддерживаемых им самим шифронаборов и сообщает клиенту, какой из них он выбрал для защиты соединения. Если на сервере задан приоритет шифронаборов, согласован будет первый совпавший в обоих списках с учетом заданного на сервере приоритета. Если не задан, то админу сервера надо оторвать руки мы погружаемся в область неизведанного теории вероятностей.

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

И тут в эту стройную картину мира влезает шифронабор на базе CHACHA20, который мы добавляем из соображений снижения нагрузки на слабых с аппаратной точки зрения клиентов, ничего не зная о том, являются ли они одновременно устаревшими или нет (т.е. флагманом этого года от третьеразрядной китайской компании или середнячком пятилетней давности от первостатейного бренда). Клиент сообщает, что поддерживает TLS 1.3 и полный комплект соответствующих шифронаборов, как на базе AES, так и на базе CHACHA20. Ваше решение, админ, какой шифронабор согласовываем клиенту? Вот и я о том же

Резюмирую вышесказанное по поводу алгоритма шифрования CHACHA20.

  1. Алгоритм вполне себе хорош и годится для использования в TLS.
  2. Шифронаборы на его основе поддерживаются только достаточно современным браузерами, так что совсем без AES пока никуда.
  3. Выигрыш в производительности от его использования можно получить не только лишь на старых бюджетных мобильных процессорах, но и на десктопах и серверах. На процессорах с аппаратной поддержкой AES, ситуация меняется на прямо противоположную.
  4. При установлении HTTPS-соединения не существует способа узнать, поддерживает ли процессор клиента AES на аппаратном уровне. Соответственно, нет способа узнать, какой шифронабор окажется быстрее в каждом конкретном случае.
Подробнее..

Анастасия Тихонова Нам крупно повезло, что атаки APT пока еще не привели к массовым человеческим жертвам

02.03.2021 18:23:53 | Автор: admin


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

Профайл:
Имя: Анастасия Тихонова.
Должность: Руководитель отдела исследования сложных киберугроз Департамента Threat Intelligence Group-IB.
Профессия: Threat Intelligence & Attribution Analyst.
Возраст: 29 лет.
Специализация: Киберразведка.
Чем известна: Более 9 лет работает в сфере информационной безопасности, последние четыре года исследует прогосударственные хакерские группы (APT).


С чем я имею дело: APT, киберармии, шпионаж и диверсии



Прямо сейчас мы все являемся свидетелями глобальной гонки кибервооружений разработки нового цифрового оружия, использования уязвимостей нулевого дня (0-day), тестирований новых средств доставки и распространения вредоносных программ. Свои киберармии есть у Китая, Северной Кореи, у США, у Ирана, и в эту гонку включились Турция, Индия, Казахстан, страны из Южной Америки. Я уже более трех лет, с 2017 года, изучаю APT (Advanced Persistent Threat) сложные целевые угрозы, атаки спецслужб или, как их еще называют, прогосударственные хакерские группы и вижу, как каждый год появляется 4-5 новых групп. Сейчас в мире действую более 70 групп, не считая тех, кто временно залег на дно или тех, кто пока еще действует скрыто. Цель большинства APT кибершпионаж, в меньшей степени саботаж и диверсии. Хотя есть и исключения в лице северокорейской группы Lazarus и многочисленных китайских APT, которые, атакуют криптовалютные биржи, банки и разработчиков компьютерных игр, чтобы заработать.

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

Любая кибератака, независимо от мотива, который преследуют хакеры это преступление и нарушение законодательства. Недавняя атака в Майами (Флорида) на АСУ ТП водоочистной системы это история с удаленным входом на компьютер. На машину был установлен TeamViewer, для того, чтобы сотрудники могли что-то удаленно контролировать. Аккаунт был запаролен, но злоумышленник смог подобрать пароль. Он логинился два раза, и во второй раз изменил количественное соотношение гидроокисида натрия в настройках интерфейса на такое, которое могло бы потенциально нанести существенный ущерб здоровью людей. Сотрудник компании, увидев это, тут же изменил настройки обратно на безопасные. И это не сюжет из киберпанк-сериала. В позапрошлом году северокорейским хакерам удалось добиться остановки энергоблоков на АЭС Куданкулам в Индии, предположительно скомпрометировав рабочую станцию довольно высокоуровневого сотрудника. В 2020 году в Израиле атакующим также удалось получить доступ к системам очистки воды и они даже удаленно пытались изменить уровень содержания хлора, что вызвало бы волну отравлений. Нам крупно повезло, что атаки APT пока еще не привели к массовым человеческим жертвам.

Крупные APT-группировки являются трендсеттерами тактики и процедуры, которые они используют в своих атаках, берет на вооружение и обычный киберкриминал. Например, после использования в 2017 году шифровальщиков WannaCry, BadRabbit и NotPetya прогосударственными группами, мир захлестнула настоящая эпидемия криминальных атак ransomware с их помощью можно заработать не меньше, чем в случае успешнои атаки на банк, при том, что техническое исполнение и стоимость атаки значительно проще. Даже такие классические финансово мотивированные преступные группы как Cobalt и Silence, раньше атаковавшие банки для хищения и вывода денег, переключились на использование шифровальщиков и стали участниками приватных партнерских программ. По нашим оценкам, ущерб от атак шифровальщиков а их было около 2000 за прошлый год составил как минимум $1 млрд. И это по самым скромным подсчетам.

Немного личного: как я пришла в профессию и о тонкостях Threat Intelligence


Мне кажется, что в инфобез я попала не случайно. В детстве я хотела стать полицейским. А в 10 классе пыталась поступить в Академию ФСБ я из семьи военнослужащих. До Group-IB я год проработала в антивирусной компании, и уже там часто замечала в прессе новости про Group-IB: выпустили новое исследование, провели расследование, участвовали в задержании. В то время на рынке ИБ-компаний было совсем немного игроков, и уже тогда Group-IB выделялась своей нетерпимостью к киберпреступности, ставкой на технологии, и мне стало интересно, узнать, какие возможности для развития здесь есть. Когда я пришла в 2013 году в Group-IB, наш департамент Threat Intelligence назывался просто отделом аналитики, и мы занимались абсолютно разными вопросами: от исследований хактивистов до помощи отделу расследований с идентификацией хакеров и установлением их личностей. За семь лет наш отдел из трех человек вырос до департамента Киберразведки с более чем тридцатью сотрудниками.

Киберразведка бывает разная. Сейчас очень часто Threat Intelligence и рынок TI-инструментов сводится к отправке клиентов банальных черных списков списка плохих адресов, плохих доменов. Для нас, в Group-IB, Threat Intelligence & Attribution это знание об атакующих, нам уже недостаточно просто анализировать угрозы. Как говорит наш CTO Дима Волков, когда вы сталкиваетесь с реальнои угрозой, вам нужен ответ на один из важных вопросов: кто вас атакует и с помощью чего? Кроме этих данных, мы даем клиентам инструменты для работы, ну и предоставляем наш собственныи сервис, которыи перекладывает часть активных задач на плечи наших специалистов, которые уже обладают необходимым опытом и навыками. Многое теперь делает за нас машинный интеллект и автоматизированные системы. Но это не отменяет тонкую ручную работу.

Одно из моих первых больших исследований было на тему атак на Россию хакеров, которые поддерживают ИГИЛ. Об этом тогда Forbes писал: Хакеры-исламисты из группировок Global Islamic Caliphate, Team System Dz, FallaGa Team атаковали около 600 российских сайтов госведомств и частных компаний. Мы тогда ещё в полу-ручном режиме получали доступ к андеграунду: я заходила на хакерские форумы, регистрировалась, собирала различную полезную информацию и данные для киберразведки (Threat Intelligence), и на их основе делала отчеты для наших клиентов. В какой-то момент мне стало просто скучно уже заниматься андеграундом, захотелось задачек посложнее и мой руководитель, Дмитрий Волков, CTO Group-IB, предложил сделать исследование про одну из китайских APT. С этого все и началось.



В моей работе нужно быстро шевелить мозгами, руками да вообще шевелиться. За один день у нас может быть исследование атак прогосударственных группировок из Китая, потом ты видишь, как прилетела сработка на правило детекта по нигерийцам (недавно была совместная операция с Interpol), а к вечеру вообще окажется, что кто-то DDOS-ит клиента от имени российских хакеров

Девушка в инфобезе? Ну да, и что? Терпеть не могу такие вопросы. Как говорится, talent has no gender. Не важно какого ты пола, ты можешь быть отличным аналитиком, рессерчером, а можешь и не быть им)).

Работа как она есть: немножко внутрянки



Мой обычный день начинается с чашки кофе и твиттера. У меня неплохая база подписок там и исследователи, и журналисты, на кого я подписана, и кто подписан на меня. В этой соцсети инфобез обменивается данными о различных атаках, отчётами вендоров. Например, очень интересные расследования делает сейчас корейская компания ESRC. Еще я подписана на парочку профильных телеграм-каналов по APT. Здесь комьюнити работает очень четко: если один исследователь нашел управляющий сервер хакерской группы и сбросил данные в телеграм-канал, ему помогают доисследовать и скидывают информацию по этому кейсу. Любая вброшенная тема про APT обычно очень быстро обрастает интересными подробностями, а вот к киберкрайму и фишингу интерес не такой повышенный. Ну может быть за исключением популярного ransomware.

Работа над любым кейсом начинается с аналитики. Как правило, перед тем, как я начну ресерч, у меня уже есть пул информации: как нашей, так и чужой (от других вендоров или аналитиков). Я начинаю раскручивать обнаруженные идикаторы: хеши троянов, вредоносных документов, домены, ссылки и так далее, которые использовались, и тестирую все это на возможность дополнения этих индикаторов нашими данными, которые ещё никто не видел, такое часто бывает. Мои рабочие инструменты наши разработки Threat Intelligence & Attribution, сетевой граф Group-IB с их помощью я довольно быстро нахожу дополнительные индикаторы компрометации и отправляю их в виде оповещения для клиента. Благодаря этому у клиентов есть возможность предотвратить атаку и заблокировать нежелательную активность.


На фото: пример исследования инфраструктуры группы с использованием сетевого графа Group-IB


У нас есть исторические связи групп и хакеров в комьюнити, данные киберпреступников за несколько лет. Это ценные данные почта, телефоны, мессенджеры, база доменов и IP, данные, связанные с рассылками вредоносных программ. Например, в базе Group-IB TI&A, все домены, когда-либо используемые злоумышленниками с историей их изменений за 17 лет. Мы можем говорить о специфике, почерке каждой отдельной преступной группы. Мы знаем, что одна группа использует одни и те же сервера, или регистрирует доменные имена у двух любимых провайдеров. Все эти данные мы загружаем в External Threat Hunting системы Group-IB и получаем на выходе то, что сейчас можно называть эффективный threat hunting.

Все, даже очень умные киберпреступники, совершают ошибки. Бывает так, что ты долго сидишь, мониторишь персонажа, пытаешься найти какие-то дополнительные аккаунты и так далее, и не можешь найти. А потом вдруг видишь, что он на выложенном в интернет скриншоте или старом фотоснимке указал свою личную почту. Приходится копать глубже, deeper analysis. Ты уже начинаешь искать дополнительные аккаунты, людей, которые могли с ним взаимодействовать, если вычисляешь конкретный город, получаешь уже больше информации, иногда бывает, что ты уже знаешь улицу. Что может быть подсказкой? Это может быть фотография из соцсетей, или фотография в инсте его девушки, нет девушки ищи в тиндере и так далее проще говоря OSINT, разведка на основе открытых источников. Этим инструментом обладают все технические подразделения Group-IB, но у каждого свой OSINT.

Нас исследуют тоже. Вы думаете нас, Group-IB, не пытались атаковать? Мы противостоим самой настоящей киберпреступности, нам пытаются угрожать, приветы присылали. Не как Кребсу, конечно, другие приветы, чаще с ВПО.

В конечном итоге вся моя аналитика нужна для того, чтобы предотвращать киберпреступления. Это кажется научной фантастикой, но мы можем предсказывать атаки еще до того, как хакеры и APT совершают их. Еще на этапе подготовки инфраструктуры мы выявляем атаки и предупреждаем клиентов. Кроме того, данные Threat Intelligence & Attribution обогащаются информацией из darkweb, с подпольных хакерских форумов и используются в других наших решениях, позволяя аналитикам увидеть наиболее полную картину угроз и атрибутировать преступную деятельность с предельной точностью.



От Кореи до Карелии: ландшафт APT


Если сравнивать разные APT, то инженерный оргазм по меткому выражению нашего босса Ильи Сачкова я испытываю от северокорейских групп. Мне нравится их подход они вдумчиво и нестандартно подходят к своей работе. Например, на этапе разведки и пробива проводят супер-реальные собеседования с кандидатами, играют вдолгую, не вызывая подозрений. Плюс у них, действительно есть интересные инструменты, которые они постоянно развивают. Изначально они начинали с классического кибершпионажа против Южной Кореи и США, со временем стали универсальными солдатами, способными похитить деньги, ценную информацию или устроить диверсию. Из года в год такие северокорейские группировки как Lazarus и Kimsuky показывают стабильное развитие методов атак и своих инструментов. В прошлом году большое количество атак северокорейских хакеров были направлены на военных подрядчиков по всему миру. Об этом писал Коммерсант, может вы читаете такую прессу:)

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

В Иране вербовка сотрудников в APT-группы происходит прямо со студенческой скамьи. Как-то раз мы опубликовали на Хабре статью про иранских хакеров, где в документах оказалась написаны имя и фамилия одного из фигурантов. Мы сначала сомневались мало ли, чье имя вписано. Однако, оказалось, что когда-то давно была засвечена его почта на хакерских ресурсах, что нас довольно сильно заинтересовало. Распутав всё это мы нашли очень много различных аккаунтов на форумах, которые посвящены обучению использования уязвимостей, что еще больше нас убедило в том, что именно этот человек блэчер, занимается хакингом. Когда мы опубликовали свои находки, он отписался в твиттере в таком духе Почему вы так просто обвиняете людей, мало ли, человека могли подставить, либо он оступился?. Через какое-то время он сам удалил это сообщение: оно обличало его с головой.

Мы не слышим про американские APT, но это не значит, что их нет. Американские группы есть, просто о них почти ничего нет. Зачем тебе много мелких APT-групп, если у тебя есть одна хорошо организованная, которая работает по задачам и шпионит за другими? Риторический вопрос. В США всё тесно связано с АНБ, то есть вот у них, я бы сказала, довольно большая сеть с вот этими 0-day и прочими уязвимостями, инструментами. То, что выложил WikiLeaks это малая часть того, что есть у АНБ.

Русские хакеры, которые работают на государство, это сейчас очень модная и хайповая на западе тема. Хакерские атаки в прессе часто привязывают к той или иной стране, исходя из напряженной политической ситуации Россия vs США, Израиль vs Иран, Северная Корея vs Южная Корея, а не на основе реальных технических данных, однозначно указывающие на ту или иную группировку. Не будем забывать о том, что группы часто используют ложные флаги, и пытаются запутать следы. Например, так делал Lazarus. Вообще русский хакер это что-то уже из конца 90-х. Нет никаких русских, есть русскоязычные выходцы из стран постсветского пространства. Да и русские хакеры самые крутые тоже уже не так: группы перемешаны и состоят из людей разных национальностей.



Не надо думать, что все просто. APT часто пытаются запутать следы, выбрасывают ложные флаги и переводят стрелки друг на друга. Те же иранские MuddyWater начинали с того, что пытались подделаться под Fin7. Если, как в случае с Lazarus, выйти на конкретные айпишники, которые принадлежат Северной Корее, то после этого можно делать заявление о том, что это Северная Корея. И так делают некоторые вендоры. А так ты можешь смотреть только на цели, которые атаковались, смотреть на инфраструктуру, откуда она была взята, и на манеру каких-нибудь комментариев в написании кода, и так далее. Если была атака в Южно-Китайском море, ты можешь предположить, что замешаны страны, интересы которых связаны с этим регионом. И дальше уже начинаешь разбираться, что за инструменты использовались: раз это троян PlugX, то скорее всего, это точно Китай. И дальше мы доходим до инфраструктуры, оказывается, что это, действительно, китайские айпишники.

Секреты мастерства и список книг для прокачки


В собственном саморазвитии потолка нет. Я бы хотела поработать в Европе и Азии, потому что там было бы больше шансов обмена опытом с другими специалистами инфобеза, начинаешь понимать менталитет и лучше представлять как бы APT могли работать конкретно в этом регионе. Думаю, что это будет несложно сделать. В позапрошлом году Group-IB открыла глобальную штаб-квартиру в Сингапуре, а в прошлом европейскую штаб-квартру в Амстердаме. Поскольку инструменты развиваются, а APT-группы не исчезнут никогда работа у меня будет всегда. Тем более будет востребована моя профессия.

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

Для того, чтобы погрузиться в профессию или прокачаться как Threat Intelligence аналитик, рекомендую этот небольшой список литературы:

  1. Нестареющая классика от ветерана ЦРУ Ричардса Хойера ( Richards Heuer) Psychology of Intelligence Analysis, которая описывает особенности нашего мышления, ошибки и ограничения (когнитивные предубеждения), которые генерирует наш мозг. Например, для распознавания неожиданного явления требуется больше однозначной информации, чем для ожидаемого: We tend to perceive what we expect to perceive.
  2. О базовых принципах и концепциях Cyber Threat Intelligence можно узнать из издания Threat Intelligence: Collecting, Analysing, Evaluating by David Chismon, Martyn Ruks from MWR InfoSecurity.
  3. Для тех, кто хочет не только в Cyber Threat Intelligence, но и более конкретно разбираться в теме с APT, есть хорошая книга Attribution of Advanced Persistent Threats: How to Identify the Actors Behind Cyber-Espionage by Timo Steffens. В ней изложен предметный анализ того, как действуют хакеры, какие ошибки они совершают и какие следы оставляют.
  4. Kill Chain, Diamond Model и MITRE ATT&CK три кита, на которых должны базироваться знания любого аналитика Cyber Threat Intelligence, в связи этим рекомендую три книги: MITRE ATT&CK: Design and Philosophy с подробным объяснением того, для чего вообще создавался и служит ATT&CK, как происходит его обновление и как его использует сообщество. Обязательно загляните и на сайт MITRE ATT&CK, где уже можно ознакомиться с описанием некоторых групп и их возможностей.
  5. Intelligence-Driven Computer Network Defense Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains by Eric Hutchins, Michael Cloppert, and Rohan Amin кроме описания самой модели Kill Chain, тут можно встретить примеры, которые также будут полезны для начинающих аналитиков.
  6. The Diamond Model of Intrusion Analysis by Sergio Caltagirone, Andrew Pendergast, and Chris Betz довольно простая, но полезная книга для понимания основ CTI.
  7. Большой репозиторий с разными исследованиями, которые выпускались вендорами ИБ, можно найти в APTNotes. Обновляется, к сожалению, нечасто, но там можно обнаружить большие интересные кейсы с описанием, как проводился анализ того, как делали атрибуцию, как действуют злоумышленники.
  8. Ну и конечно загляните к нам в блог, и почитайте исследования наших специалистов на русском языке и на английском


Как стать Threat Intelligence & Attribution Analyst?





Для тех, кто заинтересовался профессией Threat Intelligence & Attribution Analyst наша компания готова предложить практический курс по сбору информации о киберугрозах и обогащению процессов кибербезопасности данными TI для эффективного реагирования на инциденты и мониторинга угроз.


Цель курса Group-IB Threat Intelligence & Attribution Analyst научить вас собирать значимую информацию из разных типов источников как открытых, так и закрытых, толковать эту информацию и выявлять признаки подготовки к атаке. Занятия по программе включают в себя практические упражнения на основе примеров из рабочей практики Департамента киберразведки Group-IB. Такой подход важен для того, чтобы слушатели могли сразу применять полученные знания в своей ежедневной практике.

Работа, которая имеет смысл!


И еще одно важное объявление. Group-IB усиливает команду технических специалистов: стань частью команды и меняй мир вместе с нами! Сейчас открыто 120+ вакансий, в том числе 60 для технических специалистов. Подробности тут. Group-IB это новое поколение инженеров. Мы воплощаем смелые идеи, создавая инновационные технологии для расследования киберпреступлений, предотвращения кибератак, слежения за атакующими, их тактикой, инструментами и инфраструктурой. Присоединяйся!
Подробнее..

Перевод Зависимости JavaScript Все, что вы когда-либо хотели знать, но боялись спросить

02.03.2021 16:05:07 | Автор: admin

Ваше подробное руководство по пяти типам зависимости

Привет, хабровчане. Для будущих учащихся на курсе "JavaScript Developer. Professional" подготовили перевод материала.

Также приглашаем всех желающих на открытый вебинар по теме
Vue 3 возможности новой версии одного из самых популярных фронтенд фреймворков. На занятии участники вместе с экспертом:
рассмотрят ключевые отличия в синтаксисе vue2 от vue3;
разберут, как работать с vue-router и VueX в новой версии фреймворка;
cоздадут проект на Vue 3 с нуля с помощью Vue-cli.


Независимо от того, являетесь ли Вы back-end разработчиком, работающим с Node.js, или front-end разработчиком, использующим Node.js только в качестве инструмента для пакетирования и комплектации, Вы наверняка наткнулись на систему зависимостей.

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

. . .

Normal (runtime) dependencies (cтандартные (во время выполнения программы) зависимости)

Давайте начнем с простого, хорошо?

Стандартные зависимости это те, которые вы видите в списке "dependencies" в вашем файле package.json. В большинстве случаев они указывают только имя (для своего ключа) и версию (значение), а затем NPM (node package manager или любой другой менеджер пакетов) позаботится об их захвате из глобального регистра (на npmjs.org).

Однако, это еще не все. Вместо точного номера версии вашей зависимости вы можете указать:

  • Примерный вариант. Вы можете работать с обычными числовыми операторами сравнения, указывая версии больше одного определенного числа (т.е. >1.2.0 ), любой версии ниже или равной другому числу (т.е. <=1.2.0 ), а также можете обыгрывать любую из их комбинаций (т.е. >= , > , <) . Вы также можете указать эквивалентную версию с помощью оператора ~ перед номером версии (т.е. "lodash":"~1.2.2, который загрузит что угодно между 1.2.2 и 1.3.0 или, другими словами, только патчи). И мы также можем указать "совместимую" версию с другим номером, который использует semver для понимания совместимости (т.е. "lodash": "^1.2.0", которая не загрузит ничего, из того что включает в себя изменение с нарушением или отсутствием каких-либо функций).

  • URL-АДРЕС. Правильно, вы даже можете обойтись без версии и напрямую ссылаться на определенный URL, по сути загрузив этот модуль откуда-нибудь еще (например, с Github или напрямую скачав tarball-файл).

  • Локальный файл. Да, вы даже можете непосредственно обращаться к одному из ваших локальных файлов. Это очень удобно, если вы разрабатываете модуль и хотите протестировать его на проекте, прежде чем выпускать его на NPM. С помощью опции "Локальный файл" вы можете сделать ссылку на папку вашего локального модуля. Вы можете использовать как полный, так и частичный пути, при условии, что вы используете префикс-функцию с помощью file:// .

Когда ты будешь использовать стандартные зависимости?

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

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

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

. . .

Peer dependencies (Равные зависимости)

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

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

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

Когда ты будешь использовать Peer dependencies?

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

Другими словами:

  • Когда она вам нужна, но нет необходимости употреблять ее сразу и однозначно. Тогда это peer dependency.

  • Когда она вам нужна, но она уже должна быть установлена другим проектом. Тогда это peer dependency.

Примерами того, когда вы хотите использовать peerDependencies, являются:

  • Babel плагины. Ты хочешь декларировать такие же вещи, как и сам Babel, в качестве равной зависимости (peer dependency).

  • Express middleware packages (Экспресс-пакеты для промежуточной обработки): Это всего лишь один пример модуля NPM, который требует использования peer dependencies. Вы хотите определить приложение Express как зависимость, но не жесткую, в противном случае каждое промежуточное ПО (middleware) будет каждый раз инсталлировать всю структуру заново.

  • Если вы собираете Micro Frontend (Микрофронтенд), пытаясь решить, какие зависимости являются внешними (чтобы они не были связаны), а какие нет. Peer dependencies могут быть хорошим решением для этого.

  • Bit components. Если вы создаете и публикуете front-end компоненты, например, когда вы совместно используете React-компоненты на Bit (Github), вам нужно назначить react библиотеку как peer dependency. Это позволит удостовериться, что нужная библиотека доступна в хостинговом проекте без установки ее в качестве прямой зависимости от него.

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

Снимок экрана component, как видно на Bits component hub.

Если вы установите его, вы получите полный код, который содержит файл package.json, в котором перечислены все peer dependencies:

Обратите внимание, что пакет не имеет прямой зависимости, несмотря на то, что для работы ему необходима React-библиотека.

Это также помогает сохранить размер нашего компонента как можно меньше (1KB) ничего лишнего не добавляется.

. . .

Dev Dependencies (Dev зависимости)

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

Зависимости процесса разработки (Development dependencies) предназначены для того, чтобы содержать только те модули, которые вы используете на этапе разработки вашего проекта.

Да, но есть и другие, например, инструменты для подшивки (linting tools), документация и тому подобное.

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

Принцип их работы заключается в том, что зависимости разработки устанавливаются только при запуске npm install или npm link из корневой папки вашего проекта.

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

Когда ты будешь использовать dev dependencies?

Любая зависимость, которая не требуется для производственного процесса, скорее всего, будет считаться dev dependencies (зависимости развития).

Дело в том, что это отлично работает для всех модулей, кроме вашего хост-проекта.

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

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

. . .

Связанные зависимости (Bundled Dependencies)

Они предназначены для тех случаев, когда вы упаковываете свой проект в один файл. Это делается с помощью команды npm pack, которая превращает вашу папку в тарбол (tarball-файл).

Теперь, если вы сделаете это и добавите имена некоторых из ваших зависимостей в массив под названием bundledDependencies (забавный факт: если вы используете bundleDependencies, это тоже будет работать), то тарбол также будет содержать эти зависимости внутри этого массива.

{...   "dependencies": {    "lodash": "1.0.2",    "request": "4.0.1"  },  "bundledDependencies": ["lodash"]...}

Посмотрите на эту часть файла package.json, с такой установкой, при запуске команды npm pack вы получите файл tarball, также содержащий пакет lodash внутри.

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

. . .

Дополнительные зависимости (Optional dependencies)

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

Обычно, когда вы запускаете npm install и процесс не может установить обычную зависимость по какой-либо причине (будь то из-за сбоя в сети, не может найти файл, версию или что-нибудь ещё), то он выдаст ошибку и отменит процесс установки.

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

let foo = null;try {  foo = require("foo-dep");} catch (e) {  foo = require("./local-polyfill")}//... use foo from here on out

Когда вы будете использовать дополнительные зависимости (optional dependencies)?

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

Но другой интересный вариант использования, это установка действительно необязательных зависимостей (optional dependencies). Я имею в виду, что иногда у вас могут быть специфические для системы зависимости, для таких вещей, как совместимость с CI(Continuous Integration)-платформой. В таких сценариях, когда используете платформу, вы захотите установить эти зависимости, в другом случае, проигнорируете.

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

. . .

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

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

Знали ли вы, что у вас так много вариантов? Оставьте комментарий ниже, если вы использовали некоторые из менее распространенных и расскажите нам, как вы их использовали!


Узнать подробнее о курсе "JavaScript Developer. Professional".

Смотреть открытый вебинар по теме Vue 3 возможности новой версии одного из самых популярных фронтенд фреймворков.

Подробнее..

Перевод Как за 60 создать систему распознавания лиц с помощью Python и Nvidia Jetson Nano 2GB

02.03.2021 16:05:07 | Автор: admin
Теперь с помощью алгоритмов распознавания лиц и Python вы сможете с лёгкостью отслеживать всех людей, которые приближаются к вашей двери.Теперь с помощью алгоритмов распознавания лиц и Python вы сможете с лёгкостью отслеживать всех людей, которые приближаются к вашей двери.

Новый набор инструментов для разработчиков Nvidia Jetson Nano 2GB представляет собой одноплатный компьютер с графическим ускорителем стоимостью 59$, работающий под управлением программного обеспечения с искусственным интеллектом.

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


Что такое Nvidia Jetson Nano 2GB?

Jetson Nano 2GB это одноплатный компьютер с четырёхъядерным ARM-процессором 1,4 ГГц и встроенным графическим процессором Nvidia Maxwell. Это самая дешёвая модель Nvidia Jetson практически того же класса, что и одноплатный компьютер Raspberry Pi.

Компьютер Nvidia Jetson Nano 2GB имеет много общего с Raspberry Pi оба представляют собой одноплатные компьютеры на ОС Linux. Отличие состоит в том, что с целью ускорения работы моделей глубокого обучения модуль Nvidia Jetson оснащён 128-ядерным графическим процессором Nvidia и поддерживает программно-аппаратную архитектуру параллельных вычислений (CUDA).Компьютер Nvidia Jetson Nano 2GB имеет много общего с Raspberry Pi оба представляют собой одноплатные компьютеры на ОС Linux. Отличие состоит в том, что с целью ускорения работы моделей глубокого обучения модуль Nvidia Jetson оснащён 128-ядерным графическим процессором Nvidia и поддерживает программно-аппаратную архитектуру параллельных вычислений (CUDA).

Если вы уже знакомы с линейкой продуктов Raspberry Pi, то вам всё должно быть понятно. Единственным различием двух одноплатных компьютеров является то, что в Jetson Nano установлен графический процессор Nvidia. Компьютер может запускать приложения с ускорением вычислений на графических процессорах (например, модели глубокого обучения) намного быстрее, чем одноплатный Raspberry Pi, у которого нет графического процессора, способного работать с большинством технологий глубокого обучения.

Наборов инструментов для разработчиков с ИИ и модулями ускорителя существует множество, однако у продукта Nvidia есть перед ними одно важное преимущество он непосредственно совместим с библиотеками ИИ для настольных систем и не требует преобразования моделей глубокого обучения ни в какие специальные форматы для их запуска. Для ускорения вычислений на графическом процессоре в продукте Nvidia используются те же самые библиотеки CUDA, что и практически во всех базирующихся на Python системах глубокого обучения. Другими словами, вы можете взять существующую программу глубокого изучения на Python и запустить её на Jetson Nano 2GB (лишь немного её изменив) и в результате получить довольно сносную производительность (при условии, что ваше приложение сможет работать на 2 Гб оперативной памяти). Возможность взять код в Python, который был написан для мощнейшего сервера, и практически без изменений перенести его на автономное устройство стоимостью 59 долларов это ли не заманчиво?

В новом наборе инструментов Jetson Nano 2GB реализованы некоторые новые функции, которых не было в предыдущих версиях оборудования Nvidia. В первой модели Jetson Nano по непонятной причине не была реализована поддержка WiFi, данная же модель поставляется с подключаемым модулем WiFi, поэтому вам не придётся возиться с ethernet-кабелями. В новом модуле также был заменён вход по питанию установлен более современный порт USB-C, а также усовершенствованы некоторые возможности программного обеспечения. Теперь вам не нужно беспокоиться, например, о включении файла подкачки, модуль сделает это за вас.

Приобретение простого в использовании аппаратного устройства с настоящим графическим процессором обойдется вам менее чем в 60$ этот шаг со стороны Nvidia следует признать достаточно агрессивным. По всей видимости, этим они желают показать, что хотят составить прямую конкуренцию Raspberry Pi и пытаются захватить рынок образования / продуктов для программистов-любителей. Будет весьма интересно наблюдать, как на это отреагирует рынок.

Что ж, давайте приступим к сборке нашей системы

Как и при сборке любых аппаратных устройств, вначале нужно подобрать все необходимые детали:

1. Одноплатный компьютер Nvidia Jetson Nano 2GB (59$).

Продукт доступен для предварительного заказа (по состоянию на 5 октября 2020 г.). Сам продукт, как ожидается, будет выпущен в конце октября. Я не знаю, какую цену установит Nvidia на продукт после его релиза, но следует иметь в виду, что предыдущая модель Jetson Nano в течение нескольких месяцев после релиза была в дефиците.

Полная открытость: модуль Jetson Nano 2GB мне достался бесплатно за рецензию на продукты Nvidia, однако с Nvidia у меня нет ни финансовых, ни редакционных отношений. Вот как получилось, что мне удалось составить данную инструкцию до выхода продукта.

2. Адаптер питания с разъёмом USB-C (возможно, такой у вас уже есть?).

В новом компьютере Jetson Nano 2GB для питания используется разъём USB-C. Адаптер питания в комплект не входит, но у вас наверняка завалялся где-то лишний.

3. Камера: либо веб-камера с USB-выходом (возможно, у вас такая уже имеется?), либо камера Raspberry Pi Camera Module v2.x (прибл. 30$).

Если вы захотите поместить небольшую камеру в чехол, отличным выбором станет модуль Raspberry Pi Camera v2.x (примечание: модуль v1.x работать не будет). Приобрести их можно на Amazon или у множества реселлеров.

Некоторые веб-камеры с USB-выходом, например Logitech C270 или C920, прекрасно работают с Jetson Nano 2GB, так что, если у вас уже есть такая камера, можно, не задумываясь, использовать её. Ниже приводится неполный перечень USB-камер, которые должны работать.

Прежде чем торопиться покупать что-то новое, сначала проверьте: а может быть, вполне подойдут уже имеющиеся у вас USB-устройства? Не на всех из них может быть реализована поддержка драйверов Linux, но, возможно, вам удастся найти устройство с соответствующей поддержкой. Я подключил обычный адаптер HDMI-на-USB за 20$ (заказывал на Amazon), и он подошёл идеально. В качестве источника видеосигнала по HDMI мне удалось задействовать свою высококлассную цифровую камеру, причём без каких бы то ни было дополнительных настроек. Красота!

Вам понадобятся ещё несколько других компонентов, но, я полагаю, все они у вас уже есть в наличии:

  • Карта памяти microSD, на ней должно быть не менее 32 ГБ свободного пространства. На неё мы установим Linux. Если у вас имеется любая карта microSD, можете использовать её.

  • Устройство чтения карт microSD, с помощью которого мы установим на компьютер программное обеспечение Jetson.

  • Проводная USB-клавиатура и проводная USB-мышь. Эти устройства будут использоваться для управления Jetson Nano.

  • Любой монитор или телевизионный экран, на которые можно напрямую подавать сигнал HDMI (не через переходник HDMI-на-DVI). Монитор будет использоваться для визуального контроля ваших действий. Монитор вам потребуется для первоначальной настройки Jetson Nano (даже если потом Jetson Nano будет запускаться без монитора).

Загрузка программного обеспечения Jetson Nano 2GB

Перед подключением компонентов к Jetson Nano необходимо вначале загрузить образ программного обеспечения для Jetson Nano. Стандартный образ программного обеспечения Nvidia включает в себя Ubuntu Linux 18.04 с предустановленными Python 3.6 и OpenCV.

Ниже приводится инструкция по загрузке программного обеспечения Jetson Nano на SD-карту:

  1. Скачайте Jetson Nano Developer Kit SD Card Image на сайте Nvidia.

  2. Скачайте Etcher программу, которая запишет образ программного обеспечения Jetson на SD-карту.

  3. Запустите программу Etcher и используйте её для записи загруженного образа Jetson Nano Developer Kit SD Card Image на SD-карту. Это займёт приблизительно 20 минут.

Пора распаковывать остальное оборудование!

Подключаем всё что можно

Прежде всего выньте модуль Jetson Nano 2GB из коробки:

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

Затем к одному из USB-портов необходимо подключить входящий в комплект WiFi-адаптер с разъёмом USB:

После этого подключается камера.

Если используется модуль камеры Raspberry Pi v2.x, его необходимо подсоединить с помощью ленточного соединительного кабеля. Найдите разъём для ленточного соединительного кабеля на Jetson, поднимите крышку разъёма, вставьте в разъём кабель и закройте крышку разъёма. Убедитесь, что металлические контакты на ленточном соединительном кабеле смотрят внутрь радиатора:

Если используется веб-камера с разъёмом USB, просто подключите её к одному из USB-портов, порт ленточного кабеля для этого не нужен.

Теперь подключаем всё остальное:

  • подключите мышь и клавиатуру к USB-портам;

  • подключите монитор с помощью HDMI-кабеля;

  • подключите кабель питания USB-C, чтобы система могла загрузиться.

Если используется модуль камеры Raspberry Pi, в результате у вас получится примерно такая конструкция:

Если используется источник видео с USB, конструкция получится примерно такая:

При подключении кабеля питания начнётся автоматическая загрузка Jetson Nano. Через несколько секунд на мониторе появится экран инициализации Linux. Следуйте инструкциям на экране для создания учётной записи и подключения к WiFi. Все действия будут элементарные.

Установка необходимых библиотек Linux и Python для распознавания лиц

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

На рабочем столе Jetson Nano откройте окно LXTerminal и выполните следующие команды. Если система запросит пароль, нужно будет ввести тот же пароль, который был указан при создании пользовательской учётной записи:

sudo apt-get updatesudo apt-get install python3-pip cmake libopenblas-dev liblapack-dev libjpeg-dev

Вначале обновляем apt стандартный инструмент для установки программного обеспечения Linux, его мы будем использовать для установки других необходимых нам системных библиотек. Затем устанавливаем несколько Linux-библиотек, без которых наша программа не будет работать (эти библиотеки не предустановлены).

В последнюю очередь устанавливаем библиотеку Python face_recrecognition и её зависимости, в том числе библиотеку машинного обучения dlib. Это можно сделать автоматически, запустив единственную команду:

sudo pip3 -v install Cython face_recognition

Поскольку на платформе Jetson отсутствуют предварительно скомпилированные копии dlib и numpy, данная команда скомпилирует эти библиотеки из исходного кода. Вся операция займёт почти час, поэтому у вас будет время, чтобы пообедать.

Когда процесс завершится, ваш компьютер Jetson Nano 2GB с графическим ускорителем и программно-аппаратной архитектурой параллельных вычислений (CUDA) будет готов к распознаванию лиц. Теперь переходим к самому интересному!

Запуск демонстрационной версии приложения распознавания лиц для домофона

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

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

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

wget -O doorcam.py tiny.cc/doorcam2gb

В верхней части программы необходимо отредактировать строку кода, чтобы указать, используете ли вы USB-камеру или модуль камеры Raspberry Pi. Файл можно изменить таким образом:

Вставка с кодомСледуйте инструкциям, затем сохраните код, выйдите из GEdit и запустите код:

gedit doorcam.py

На рабочем столе появится окно с видео. Каждый раз, когда новый человек будет подходить к камере, система будет регистрировать его лицо и рассчитает продолжительность нахождения такого человека перед дверью. Если один и тот же человек уйдет и вернётся через 5 минут или позже, система зарегистрирует новый визит и заново рассчитает продолжительность. Чтобы в любое время выйти из программы, нужно нажать на клавиатуре клавишу 'q'.

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

Превращаем систему в автономное аппаратное устройство

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

Одной из самых полезных особенностей современных одноплатных компьютеров является то, что все они поддерживают одни и те же аппаратные стандарты, в частности USB. Другими словами, у вас появляется колоссальный выбор дешёвых дополнительных устройств, например, сенсорных экранов и аккумуляторных батарей, которые можно приобрести на Amazon. Вы сами можете подобрать оптимальные компоненты по параметрам входа, выхода и мощности. Вот что заказал я сам (себе вы можете заказать что-то похожее):

7-дюймовый сенсорный HDMI-экран, способный запитываться от USB-порта:

И обычный зарядный батарейный блок (power bank) с выходом USB-C для подачи питания:

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

Всё работает идеально. Сенсорный экран работает как обычная USB-мышь без дополнительных настроек. Есть единственный недостаток: если Jetson Nano 2GB станет потреблять больше энергии, чем может выдавать USB-аккумулятор, быстродействие графического процессора может снизиться. Но и в том, и в другом случае результаты получаются вполне удовлетворительные.

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

Обзор кода Python для домофона

Хотите понять, как работает код? Давайте разберёмся.

Сначала в код необходимо импортировать библиотеки, которые мы собираемся использовать. Самые важные из них OpenCV (в Python она называется cv2), которую мы будем использовать для считывания изображений с камеры, и face_recognition, которую мы будем использовать для обнаружения и сравнения лиц.

import face_recognitionimport cv2from datetime import datetime, timedeltaimport numpy as npimport platformimport pickle

После этого нам нужно указать, как будет осуществляться доступ к камере, так как процесс получения изображения с модуля камеры Raspberry Pi работает иначе, чем процесс получения изображения с USB-камеры. Для этого нужно просто изменить эту переменную на True или False, в зависимости от оборудования:

# Set this depending on your camera type:# - True = Raspberry Pi 2.x camera module# - False = USB webcam or other USB video input (like an HDMI capture device)USING_RPI_CAMERA_MODULE = False

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

known_face_encodings = []known_face_metadata = []

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

У нас имеется функция, сохраняющая и загружающая данные об известных лицах. Это функция сохранения (save):

def save_known_faces():    with open("known_faces.dat", "wb") as face_data_file:        face_data = [known_face_encodings, known_face_metadata]        pickle.dump(face_data, face_data_file)        print("Known faces backed up to disk.")

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

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

def register_new_face(face_encoding, face_image):    known_face_encodings.append(face_encoding)known_face_metadata.append({        "first_seen": datetime.now(),        "first_seen_this_interaction": datetime.now(),        "last_seen": datetime.now(),        "seen_count": 1,        "seen_frames": 1,        "face_image": face_image,    })

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

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

def lookup_known_face(face_encoding):    metadata = None    if len(known_face_encodings) == 0:        return metadata    face_distances = face_recognition.face_distance(        known_face_encodings,         face_encoding    )    best_match_index = np.argmin(face_distances)    if face_distances[best_match_index] < 0.65:        metadata = known_face_metadata[best_match_index]        metadata["last_seen"] = datetime.now()        metadata["seen_frames"] += 1        if datetime.now() - metadata["first_seen_this_interaction"]                  > timedelta(minutes=5):            metadata["first_seen_this_interaction"] = datetime.now()            metadata["seen_count"] += 1    return metadata

В этой части кода мы делаем несколько важных вещей:

  1. Используя библиотеку face_recogntion, мы проверяем, в какой степени черты неизвестного лица совпадают с чертами лиц всех прошлых посетителей. Функция face_distance()выдаёт численное значение степени сходства между неизвестным лицом и всеми известными лицами чем меньше число, тем больше похожих лиц.

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

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

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

def main_loop():    if USING_RPI_CAMERA_MODULE:        video_capture =             cv2.VideoCapture(                get_jetson_gstreamer_source(),                 cv2.CAP_GSTREAMER            )    else:        video_capture = cv2.VideoCapture(0)

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

Итак, начинаем захватывать кадры с видео:

while True:    # Grab a single frame of video    ret, frame = video_capture.read()    # Resize frame of video to 1/4 size    small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)    # Convert the image from BGR color    rgb_small_frame = small_frame[:, :, ::-1]

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

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

Теперь мы можем обнаружить все лица на изображении и преобразовать каждое лицо в кодированное изображение. Это делается всего двумя строками кода:

face_locations = face_recognition.face_locations(rgb_small_frame)face_encodings = face_recognition.face_encodings(                     rgb_small_frame,                      face_locations                  )

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

for face_location, face_encoding in zip(                       face_locations,                        face_encodings):metadata = lookup_known_face(face_encoding)    if metadata is not None:        time_at_door = datetime.now() -             metadata['first_seen_this_interaction']        face_label = f"At door {int(time_at_door.total_seconds())}s"    else:        face_label = "New visitor!"        # Grab the image of the face        top, right, bottom, left = face_location        face_image = small_frame[top:bottom, left:right]        face_image = cv2.resize(face_image, (150, 150))        # Add the new face to our known face data        register_new_face(face_encoding, face_image)

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

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

for (top, right, bottom, left), face_label in                   zip(face_locations, face_labels):    # Scale back up face location    # since the frame we detected in was 1/4 size    top *= 4    right *= 4    bottom *= 4    left *= 4    # Draw a box around the face    cv2.rectangle(        frame, (left, top), (right, bottom), (0, 0, 255), 2    )    # Draw a label with a description below the face    cv2.rectangle(        frame, (left, bottom - 35), (right, bottom),         (0, 0, 255), cv2.FILLED    )    cv2.putText(        frame, face_label,         (left + 6, bottom - 6),         cv2.FONT_HERSHEY_DUPLEX, 0.8,         (255, 255, 255), 1    )

Я также хотел вывести в верхней части экрана пополняемый список последних посетителей с указанием количества посещений вашего дома:

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

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

number_of_recent_visitors = 0for metadata in known_face_metadata:    # If we have seen this person in the last minute    if datetime.now() - metadata["last_seen"]                          < timedelta(seconds=10):# Draw the known face image        x_position = number_of_recent_visitors * 150frame[30:180, x_position:x_position + 150] =              metadata["face_image"]number_of_recent_visitors += 1        # Label the image with how many times they have visited        visits = metadata['seen_count']        visit_label = f"{visits} visits"if visits == 1:            visit_label = "First visit"cv2.putText(            frame, visit_label,             (x_position + 10, 170),             cv2.FONT_HERSHEY_DUPLEX, 0.6,             (255, 255, 255), 1        )

Наконец, мы можем вынести текущий кадр видео на экран и поверх этого кадра вывести все наши пояснения:

cv2.imshow('Video', frame)

Чтобы не утратить данные в случае программного сбоя, через каждые 100 кадров будем сохранять на диск список известных лиц:

if len(face_locations) > 0 and number_of_frames_since_save > 100:    save_known_faces()    number_of_faces_since_save = 0else:    number_of_faces_since_save += 1

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

Код запуска программы находится в самом низу:

if __name__ == "__main__":    load_known_faces()    main_loop()

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

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

Интересный факт: похожие системы отслеживания лиц установлены вблизи многих рекламных стендов с объявлениями на улицах и автовокзалах. Система определяет, кого из прохожих интересует данное объявление и как долго люди его изучают. Возможно, полчаса назад это прозвучало бы для вас дико, но вы ты только создали точно такую же систему всего за 60$!

Расширение возможностей программы

Данная программа пример того, как с небольшим количеством кода Python 3, запущенного на дешёвом одноплатном компьютере Jetson Nano 2GB, можно создать мощную систему.

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

Также можно попробовать превратить эту программу во что-то совершенно другое. Схема, при которой осуществляется чтение кадра видео, затем выполняется поиск чего-то конкретного на изображении, затем выполняется соответствующее действие, это основа основ всех видов систем машинного зрения. Попробуйте изменить код и подумайте, где ещё его можно применить! Как вам, например, такая идея каждый раз, когда вы приходите домой и открываете входную дверь, вас будет встречать любимая музыка? Ознакомьтесь с некоторыми другими примерами использования библиотеки Python face_recognition и узнайте, как можно реализовать нечто подобное.

Узнайте больше о платформе Nvidia Jetson

Узнайте больше о том, как создавать устройства с помощью аппаратной платформы Nvidia Jetson, запишитесь на новый бесплатный учебный курс Nvidia по Jetson. Более подробная информация приведена на сайте Nvidia. Вы также также можете посетить отличные общественные ресурсы, например сайт JetsonHacks.

Узнайте подробности, как получить Level Up по навыкам и зарплате или востребованную профессию с нуля, пройдя онлайн-курсы SkillFactory со скидкой 40% и промокодомHABR, который даст еще +10% скидки на обучение.

Другие профессии и курсы
Подробнее..

Использование code-style плагинаktlintвKotlinпроекте. Краткая инструкция дляbackend-разработчика

02.03.2021 18:23:53 | Автор: admin

Я работаюJava/Kotlin-разработчиком в компании EPAM.

В первой статье ярассказывала про свой проект Brain-Up.

В этой статье хочу поделиться опытом настройки плагина ktlint для Kotlin проекта.

Данный плагин помогаетобеспечиватьединыйcodestyleна проекте. Он построен на официальных рекомендациях по форматированию кода дляKotlinотJetBrains.С помощью данного инструмента можно не только проверить код, но и отформатировать его.

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

Потому решилаподелиться свои опытом,надеюсь кому-то будет полезнапошаговая инструкция подключения к проекту.Этотпример актуален для проекта наKotlin1.4,gradle6.0.

#1. Добавление зависимости в build.gradle на плагин

dependencies {        ktlint "com.pinterest:ktlint:0.38.0"}

#2. Добавление gradle таски `ktlintFormat`

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

task ktlintFormat(type: JavaExec, group: "formatting") {    description = "Fix Kotlin code style deviations."        classpath = configurations.ktlint        main = "com.pinterest.ktlint.Main"        args "-F", "src/*/.kt"}

#3. Конфигурирование gradle таски `ktlint` для вашего проекта

project.task("ktlint", type: JavaExec) {        group = "verification"        description = "Runs ktlint."        main = "com.pinterest.ktlint.Main"        classpath = project.configurations.ktlint        args = [                    "--reporter=plain",                    "--reporter=checkstyle,output=${project.buildDir}/reports/ktlint/ktlint-checkstyle-report.xml",                    "src/*/.kt"    ]}

#4. Встраивание таски `ktlint` в процесс сборки приложения

compileKotlin.dependsOn ktlint

В данном случае проверка форматирования кода будет запускаться до компиляции. Чем быстрее мы узнаем онесоответствии, то есть упадет эта проверка,тем лучше. В этом случаеможновсёбыстроисправить.

Если возникаетошибкаформатирования, то мыувидим примерно такое сообщение, из которого понятно,что и где не так.

Правим форматирование.

#5. Настройка параметров Idea для правильного форматирования

Это можно настроить здесь File -> Settings -> Code Style -> Kotlin.

#6. Форматирование текущего класса

Первый способ.

Мне удобно при работе с классом сразу по окончании нажатьCtrl+Alt+L,и класс автоматически отформатируется согласно установленным вIdeaсвойствам форматирования. Если выделить мышкой папочку в проекте и нажать на ней данную комбинацию, то отформатируются все классы в этой папочке согласно настройкамIdea, которые мы задали выше.

Второй способ.

Если не хочется настраиватьIdeaи пользоваться еёвозможностями форматированияможно перед сборкой запустить таскуktlintFormatона отработает для всего проекта.

#7. Выключение правил

Если что-то не очень нравится и сильно хочетсявыключитьправило, которое мешает,этоможно сделать с помощью добавленияспециального файла .editorconfig и там выключать правила.

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

[*.{kt,kts}]disabled_rules = import-ordering

Резюме

Таквыглядитвbuild.gradleдобавление плагина в итоге у нас на проекте. Работаем с ним 2-й год, всё стабильно пока.

Если у вас есть свои идеи,опыт, как улучшить / решить задачу единого code style на Kotlin проекте,пишите в комментариях, будет интересно узнать:какими вы пользуетесь плагинами, насколько они удобны, стабильны к обновлениям языка и быстро настраиваемы.

Полный пример, при желании, можно посмотреть в нашем открытом репозитории Open Source социального проекта Brain-up, к которомуможет присоединитьсялюбойжелающий,получить опыт работы в профессиональной команде и принести реальную пользу обществу.

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

Всем удачи!

Подробнее..

Многопоточность на низком уровне

02.03.2021 14:06:25 | Автор: admin

Очень часто при обсуждении многопоточности на платформе .NET говорят о таких вещах, как детали реализации механизма async/await, Task Asynchronous Pattern, deadlock, а также разбирают System.Threading. Все эти вещи можно назвать высокоуровневыми (относительно темы хабрапоста). Но что же происходит на уровне железа и ядра системы (в нашем случае Windows Kernel)?


На конференции DotNext 2016 Moscow Гаэл Фретёр, основатель и главный инженер компании PostSharp, рассказал о том, как в .NET реализована многопоточность на уровне железа и взаимодействия с ядром операционной системы. Несмотря на то, что прошло уже пять лет, мы считаем, что никогда не поздно поделиться хардкорным докладом. Гаэл представил нам хорошую базу по работе процессора и атомным примитивам.



Вот репозиторий с примерами из доклада. А под катом перевод доклада и видео. Далее повествование будет от лица спикера.



Сегодня я хотел бы поговорить о многопоточности на самом низком уровне. В докладе не будет ничего принципиально нового, всё это уже было в версии .NET 1.0. Однако, я потратил несколько недель на то, чтобы изучить спецификацию AMD64 и структурировать информацию.


У этого доклада две цели:


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

Сначала мы разберем, что происходит на уровне железа: CPU и уровни памяти, всё, что с ними происходит. Далее перейдем к ядру Windows. А после этого обсудим на первый взгляд простые вещи, такие как lock. Скорее всего, вы и сами знаете, зачем нужно это ключевое слово. Я же собираюсь объяснить, как оно реализовано.


Микроархитектура


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



Это что-то вроде Intel Core i7 своего времени. Как вы видите, за 70 лет была проделана большая работа.


К чему это все? Обычно предполагают, что байт памяти представлен где-нибудь в ячейке оперативной памяти. Но на самом деле всё иначе: он может быть представлен в нескольких местах одновременно. Например, в шести ядрах, может быть в кэшах L1 и L2, в кэше L3, наконец, может быть в оперативной памяти. Важно упомянуть: в этой архитектуре процессора есть общий кэш L3, и между ними есть Uncore. Этот компонент отвечает за координацию ядер. Также есть QPI, который отвечает за разницу между CPU. Это относится только к мультипроцессорным системам.



Почему нас беспокоит архитектура процессора? По той же причине, по которой нам нужны несколько разных уровней кэшей. У каждого уровня своя задержка. Обращаю внимание на то, что цикл CPU на этой спецификации занимает 0,3 наносекунды и сравнивается с задержкой кэшей L1, L2, L3 и DRAM. Важно заметить, что извлечение конструкции из DRAM требует около 70 циклов процессора. Если вы хотите рассчитать эти значения для своего процессора, то могу посоветовать хороший бенчмарк SiSoft Sandra.



Теперь давайте посмотрим на это более подробно. Для простоты предположим, что здесь у меня есть двухпроцессорная система. У каждого из процессоров есть четыре ядра и L2-кэш, а L1-кэш отсутствует. Также есть L3-кэш и общая оперативная память.



Хорошая аналогия для понимания многопоточных систем распределенные системы.


Если вы знаете, что такое очередь сообщений (message queue) или шина данных (message bus), вам будет легче понять многопоточность: похожие вещи есть внутри вашего процессора. Там есть очередь сообщений, шина сообщений, буферы из-за всего этого у нас возникают проблемы с синхронизацией. При взаимодействии ядер информация распределена между L2 и L3-кэшами и памятью. Поскольку шины сообщений асинхронны, порядок обработки данных не гарантирован. Кроме кэширования процессор буферизует данные и может решить оптимизировать операции и отправлять сообщения на шину в другом порядке.


Переупорядочивание памяти


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



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



Итак, давайте рассмотрим одну архитектуру. Пусть это будет x86 или AMD64, здесь не так много Y. Это означает, что она дает нам много гарантий в разных вопросах. На самом деле, x86 изначально не разрабатывался под многоядерные процессоры, поэтому когда Intel начали добавлять новые ядра, они решили сохранить ту же семантику, что раньше.


По таблице видим, что процессор с этой архитектурой может переупорядочить операции сохранить (store), после операций загрузить (load). Когда вы хотите сохранить значение, достаточно отправить сообщение. Ждать ответа не обязательно. А когда вы загружаете данные, вам нужно отправить запрос и ждать ответа. Для этой операции процессор может применить различные оптимизации.


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


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


На Intel x86 вы можете быть уверены, что переменные A и B идут строго последовательно, то есть если удалось загрузить B, то переменная A точно инициализирована. А если всё это выполняется на ARM, то у нас нет никаких гарантий, в каком порядке все это будет выполняться и как процессор проведет оптимизацию.



Барьеры памяти



Помимо оптимизации процессора, существует ещё оптимизация компилятора и среды выполнения. В контексте данной статьи под компилятором и средой я буду понимать JIT и CLR. Среда может кэшировать значения в регистрах процессора, переупорядочить операции и объединять операции записи (coalesce writes).


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


Иногда бывает нужно, чтобы весь код был точно выполнен до какой-либо определенной инструкции, и для этого используются барьеры памяти. Барьер памяти это инструкция, которая реализуется процессором. В .NET она доступна с помощью вызова Thread.MemoryBarrier(). И что же он делает? Вызов этого метода гарантирует, что все операции перед этим методом точно завершились.


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



Есть еще одна причина использовать барьеры памяти. Если вы пишете код на 32-битной машине с использованием long, DateTime или struct, то атомарность выполнения операций может нарушаться. Это значит, что даже когда в коде записана одна инструкция, на самом деле могут произойти две операции вместо одной, причем они могут выполняться в разное время.



Атомарные операции


Возникает вопрос: что же делать со всем этим беспорядком и неопределенностью? Как синхронизировать ядра? На помощь приходит System.Threading.Interlocked, и это единственный механизм в .NET, предоставляющий доступ к атомарным операциям и на аппаратном уровне.


Когда мы говорим, что операция атомарна, мы имеем в виду, что она не может быть прервана. Это означает, что во время выполнения операции не может произойти переключение потока, операция не может частично завершиться. О разнице между атомарностью, эксклюзивностью и изменением порядка выполнения вы можете узнать из доклада Саши Гольдштейшна Модели памяти C++ и CLR. Более подробно об атомарности рассказывал Карлен szKarlen Симонян в докладе Атомарные операции и примитивы в .NET.

Interlocked содержит такие операции, как инкрементирование (Increment), обмен (Exchange) и обмен через сравнение (CompareExchange).


Я собираюсь разобрать не очень часто используемую операцию CompareExchange, также известную как CAS. Она изменяет значение поля на новое только в том случае, если текущее поле равно какому-либо определенному значению. Эта операция необходима для всех параллельных структур.


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



Не стоит забывать про стоимость выполнения Interlocked-операций. Стоимость инкрементирования в кэше L1 примерно равна удвоенной задержке кэша L1. Вполне быстро! Но стоимость использования Interlocked-инкремента составляет уже целых 5,5 наносекунд, даже если это происходит в единственном потоке. Этот показатель близок к показателю задержки кэша L3. А если у вас два потока обращаются к одной кэш-линии, то стоимость удваивается: ядрам приходится ждать друг друга.



Проанализируем случай, когда двум ядрам приходится ждать друг друга. Для этого используем Intel Vtune Amplifier профайлер со счетчиками производительности процессора. Он подсчитывает частоту цикла процессора и частоту процессора, нужную для выполнения одной инструкции. На картинке ниже показатель подсвечен красным. Профайлер выдает дополнительную информацию, почему соответствующее значение это плохо. Если несколько ядер обращаются к одной кэш-линии, то возникнут проблемы с производительностью. Это особенно критично для приложений, которые обрабатывают большое количество транзакций в секунду.



Многозадачность


На уровне процессора нет таких понятий, как поток и процесс: всё, что мы называем многопоточностью, предоставляет операционная система. А Wait(), на самом деле, не может заставить процессор ждать. Эта команда переводит его в режим пониженного энергопотребления (lower energy state).


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


Для процессора существует только понятие задачи (Task). Вместо потоков есть сегмент состояния задачи, который позволяет сменить таск. Состояние процессора означает состояние доступа к регистрам и маппинга памяти.



Можно использовать compareExchange на примере очень простой реализации ConcurrentStack.


Весь код (финальная версия):


internal sealed class MyConcurrentStack<T>{   private volatile Node head;   public void Push(T value)   {       SpinWait wait = new SpinWait();       Node node = new Node {Value = value};       for ( ;; )       {           Node localHead = this.head;           node.Next = localHead;           if (Interlocked.CompareExchange(ref this.head, node, localHead)                == localHead)               return;           wait.SpinOnce();       }   }   public bool TryPop(out T value)   {       SpinWait wait = new SpinWait();       for ( ;; )       {           Node localHead = this.head;           if (localHead == null )           {               value = default(T);               return false;           }           if (Interlocked.CompareExchange(ref this.head,               localHead.Next, localHead) == localHead )           {               value = localHead.Value;               return true;           }           wait.SpinOnce();       }   }   #region Nested type: Node   private sealed class Node   {       public Node Next;       public T Value;   }   #endregion}

Класс Node (внутри класса MyConcurrentStack<T>) хранит значение и содержит ссылку на следующий элемент.


Давайте сначала посмотрим на неблокирующую реализацию стека:


private sealed class Node{   public Node Next;   public T Value;}

Посмотрим на неблокирующую реализацию стека, здесь мы не используем ключевое слово lock и wait-операции:


private volatile Node head;public void Push(T value){// первым делом создаем элемент стека, тут все просто   Node node = new Node {Value = value};   for ( ;; )   {// записываем ссылку на текущую верхушку стека в локальную//переменную       Node localHead = this.head;// для нового элемента указываем ссылку на следующий элемент,// которым будет являться текущая вершина стека       node.Next = localHead;// меняем верхушку стека (this.head) на новый элемент (node),// если верхушка стека уже не была изменена       if (Interlocked.CompareExchange(           ref this.head, node, localHead ) == localHead )           return;   }}

Зачем здесь нужен условный оператор? Может случиться так, что два потока пытаются запушить новое значение в стек. Эти два потока видят одно и то же поле head. Первый поток начал вставлять новое значение до того, как это начал делать второй поток. После того как первый поток вставил значение, актуальная ссылка на headесть только у этого потока. У второго потока будет ссылка на элемент, который теперь считается следующим после head, то есть head.Next. Такая ситуация показывает, насколько важно бывает иметь такие атомарные операции, как CompareExchange.


Этот способ решения задачи основан на неблокирующей структуре данных. В методе TryPop() мы используем тот же прием:


public bool TryPop(out T value)   {       for ( ;; )       {           Node localHead = this.head;           if (localHead == null)           {               value = default(T);               return false;           }           if (Interlocked.CompareExchange(ref this.head, localHead.Next, localHead)               == localHead )           {               value = localHead.Value;               return true;           }       }   }

Берем head и заменяем её следующим узлом, если, конечно, она уже не была изменена.


В время теста MyConcurentStack участвовало два ядра. Одно ядро выполняло операцию Push(), другое операцию Pop(), ожидание отсутствовало в течение 6 миллионов операций по обмену сообщениями между двумя ядрами.


У этой структуры данных есть два недостатка:


  1. необходимость очистки
  2. необходимость выделения памяти для элементов коллекции

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


В результате все работает гораздо быстрее: 9 миллионов транзакций в секунду.


public class TestMyConcurrentStack : TestCollectionBase{   private readonly MyConcurrentStack<int> stack =        new MyConcurrentStack<int>();   protected override void AddItems(int count)   {       for (int i = 0; i < count; i++)       {           this.stack.Push(i);       }   }   protected override void ConsumeItems(int count)   {       SpinWait spinWait = new SpinWait();       int value;       for (int i = 0; i < count; )       {           if (this.stack.TryPop(out value))           {               i++;               spinWait.Reset();           }           else           {               spinWait.SpinOnce();           }       }   }}


Операционная система (ядро Windows)



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



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


Давайте докажу это. На этом компьютере у меня четыре ядра с гипертредингом, то есть восемь логических процессоров. Всего в системе 2384 потока.Так как логических процессоров всего 8, то получается, что все 2376 потоков в данный момент ожидают, пока до них дойдет очередь выполнения. В 99,9% случаев основное занятие потоков это ожидание.



Одна из функций ядра Windows состоит в том, чтобы заставлять потоки ждать. У внутреннего ядра Windows есть граф зависимостей между потоками и объектами-диспетчерами (dispatcher objects) Среди этих объектов могут быть таймеры, объекты, семафоры и события.


В какой-то момент некоторые зависимости исчезают, и соответствующие потоки переходят из состояния ожидания (wait) в состояние готовности (ready). Потоки в состоянии готовности отправляются в очередь ожидания, а после этого они уходят на разные ядра и начинают выполняться.


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


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


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



Стоимость диспетчеризации уровня ядра


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



Посмотрите на график, посмотрите на стоимость инкрементирования или доступа к кэшу L1, а затем на стоимость присваивания объекта диспетчера ядра. Две наносекунды и 295 наносекунд огромная разница! А создание объекта диспетчера вообще занимает 2093 наносекунды.


При разработке важно писать код, который не будут создавать объекты диспетчера лишний раз, иначе можно ожидать большую потерю производительности. На уровне .NET у нас есть Thread.Sleep, который использует внутренний таймер. Thread.Yield возвращает выполняющийся поток обратно в очередь ожидания потоков. Thread.Join блокирует вызывающий поток. Но сейчас я хочу более подробно рассказать про Thread.SpinWait.



SpinWait


Представьте, что у вас есть у вас есть два процессора, и на нулевом вы выполняете присваивание A = 1, потом устанавливаете барьер памяти, а затем снова выполняете присваивание B = 1.


На первом процессоре вы получаете А, равное 1, а затем вы ждете, пока B не присвоят значение 1. Казалось бы, такие операции должны быстро выполниться и в кэше L1, и даже в кэше L3. Здесь загвоздка в том, что нулевой процессор может превентивно прерваться, и между операциями из строк 1 и 3 может пройти несколько миллисекунд. SpinWait() способен решать такие проблемы.



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


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


Монитор и ключевое слово lock


Теперь давайте вернемся к ключевому слову lock. Скорее всего, вы знаете, что это просто синтаксический сахар для try/catch Monitor.Enter/Monitor.Exit.


  1. Выполняется Interlocked-операция: каждый объект в .NET имеет хедер, который говорит, на каком потоке он находится и для чего он заблокирован.


  2. Идёт SpinWait, если операция завершится неудачей.


  3. CRL создает kernel event, если выполнение SpinWait не дало ожидаемого результата. После нескольких миллисекунд ожидания создается еще один kernel event, но только в другом потоке.



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


Структуры данных из пространства имен System.Collections.Concurrent


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


Concurrent Stack


В ConcurrentStack вводится понятие производителей и потребителей, которые конкурируют за то, чтобы получить верхушку стека.



Concurrent Queue


В другой структуре данных ConcurrentQueue потребители конкурируют за разные узлы. Это увеличивает пропускную способность в два раза: производители и потребители конкурируют между собой только в своей группе.



Concurrent Bag


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



Заключение


  1. На аппаратном уровне есть только операции Interlocked и барьеры памяти.
  2. На уровне ядра Windows вводится такая абстракция, как поток. Основное предназначение потока это ожидание и хранение набора зависимостей.
  3. Также мы рассмотрели некоторые коллекции из стандартной библиотеки.

Если доклад показался вам достаточно хардкорным, загляните на сайт конференции Dotnext 2021 Piter, которая пройдёт с 20 по 23 апреля. Основными темами станут настоящее и будущее платформы .NET, оптимизация производительности, внутреннее устройство платформ, архитектура и паттерны проектирования, нетривиальные задачи и best practices. На сайте начинают появляться первые доклады, со временем список будет пополняться.
Подробнее..

Код ревью как быть хорошим автором

02.03.2021 16:05:07 | Автор: admin

Привет! Меня зовут Сергей Загурский, я работаю в Joom в команде инфраструктуры. В своей практике ревьюера кода я регулярно сталкиваюсь с тем, что автор не понимает, что ревьюер не является волшебным чёрным ящиком, в который можно закинуть любые изменения и получить по ним обратную связь. Ревьюер, как и автор, будучи человеком, обладает рядом слабостей. И автор должен (если, конечно, он заинтересован в качественном ревью), помочь ревьюеру настолько, насколько это возможно.

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

Зачем мы делаем ревью кода

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

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

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

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

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

Дальше мы сосредоточимся на самой фундаментальной составляющей процесса ревью на понимании кода.

Как ревьюер делает ревью

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

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

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

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

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

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

Как помочь ревьюеру провести качественное ревью

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

Перед тем, как превратить свои изменения в Pull Request, следует разбить их на логические куски, если в этом есть необходимость. Комфортный объём ревью заканчивается примерно на 500 строках кода изменений. Допустимый примерно на 1000 строках. Всё, что за пределами 1000 строк, должно быть разбито на более мелкие Pull Requestы.

Если вы, как и я, не разбиваете свои изменения на куски комфортного размера заранее, то это придётся проделать перед отправкой ваших изменений на ревью. Отмазка, что на это нужно потратить время, не катит. Принимая решение об отправке на ревью 1000+ строк кода, вы, фактически, оцениваете своё время дороже времени ревьюера. По нашим правилам у ревьюера всегда есть право потребовать разбить изменения на более мелкие куски. Мы всегда просим коллег относиться с пониманием, если он этим воспользуется. С опытом становится проще строить свою работу так, чтобы у вас не появлялись гигантские Pull Requestы, в которых ничего нельзя отделить.

Отдельно стоит упомянуть изменения, внесённые в код с помощью авторефакторинга или sedа. Объём таких изменений может быть очень большим. Наличие автоматических изменений вместе с осмысленными изменениями усложняет ревью. Всегда отделяйте авторефакторинги в отдельные Pull Requestы, если их объём сопоставим с объёмом нового кода, написанного вами.

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

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

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

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

В целом, я считаю допустимым потратить порядка 10% от времени, затраченного на написание кода, на подготовку к ревью. Это время автора, которое мы обменяем на экономию времени ревьюера, и на улучшение качества ревью. Следует помнить, что ревьюеру на качественное ревью легко может потребоваться и 20%, и 50% от времени, затраченного автором на написание кода.

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

Дальше начинается жизненный цикл Pull Requestа. Ревьюер должен либо одобрить его, либо попросить внести изменения. Чтобы упростить работу ревьюера, автору стоит добавить комментарий к каждому запрошенному изменению. Это вполне может быть краткое OK или Исправил, если ничего другого не требуется. Убедитесь, что вы понимаете, что просит ревьюер и что вам понятна его аргументация. Не стоит безоговорочно принимать любые запросы на внесение изменений, возводя тем самым ревьюера в околобожественный ранг. Ревью это обоюдный процесс. Если ревьюеру что-то не понятно, то он спрашивает об этом автора, и наоборот. В случае, если автор не очень опытен, ревьюеру следует приложить особенные усилия к описанию запросов на изменения, чтобы воспользоваться возможностью поделиться с автором своим опытом. Бывают и спорные моменты, когда аргументация недостаточно сильная, чтобы склонить обе стороны к единой точке зрения. С учётом того, что автор находится в более уязвимой позиции, считаю, что при прочих равных преимущество должно оставаться за автором.

Не вносите изменений в свой Pull Request, не относящихся к тому, что попросил вас ревьюер. Это крайне сбивает с толку. Также следует воздержаться от rebase и подобных действий.

Получили одобрение от ревьюера? Отлично, ещё одно качественно написанное и оформленное изменение было добавлено в проект!

Подробнее..

Внедрять или не внедрять

02.03.2021 18:23:53 | Автор: admin
Привет, Хабр!

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

Март 2020. Китай. Пандемия. Covid-19. Локдаун. Удаленка. Маски. Остановка авиасообщения. И другие знакомые всем хэштеги, которые теперь ассоциируются с 2020 годом. Проект уже в активной фазе внедрения, клиент настроен решительно, да и мы тоже не готовы отступать. Надо адаптироваться к таким условиям, причем быстро. Паники нет. Но есть вопросы, много вопросов. Насколько долго это продлится? Какие риски у запуска? Хватит ли нам виртуальной коммуникации? Как запускаться удаленно? Эти вопросы волновали нас на протяжении всего проекта. Как Клиент и наша команда через это проходили, чему научились, и какой осадок остался обо всём об этом далее в статье.

Наталья, руководитель проекта со стороны Клиента
Проекты такого масштаба для большинства участников нашей команды это новый опыт. Меняется не только программный продукт для подготовки отчетностей по МСФО, кардинально меняется весь процесс подготовки отчетности, мы выходим на новый уровень автоматизации. Бесшовная интеграция с ERP-системой, использование единых справочников, автоматизация процесса выверки внутригрупповых оборотов, прозрачность данных и другие плюшки нового модуля консолидации смотрят на нас со страниц презентаций нашего интегратора. Ощущения такие, как будто нас пересаживают с нашего ретро-автомобиля в какой-то навороченный летательный аппарат, где все красиво и блестит, и много-много кнопочек, но, как всем этим пользоваться, непонятно. А дата запуска уже определена и переносу не подлежит! Команда со стороны интегратора рассказывает про ACDOCA, BPF и других незнакомых нам зверей, мы сидим, хлопаем глазами и понимаем, что нам нужны: а) переводчики, иначе мы так и не поймем коллег, б) дополнительные руки для написания инструкции по эксплуатации методологии для нашего космического консолидационного модуля.
Наша команда это специалисты по подготовке отчетностей по МСФО, которые работают на предприятиях Холдинга в разных регионах России и мира. Поэтому коммуникация при подготовке отчетностей или прохождении аудита через различные средства связи телефон, е-мейл, skype и т.д. для нас привычное дело. А жесткие дедлайны, многозадачность и большой объемом работ это наш конек!
Для подготовки отчетностей нам не нужны ежедневные личные встречи, 90% требуемой информации мы получаем посредством виртуальной коммуникации с коллегами. Поэтому введение режима самоизоляции мы встретили даже с воодушевлением: не нужно тратить время на дорогу в офис, можно встать на 2 часа позже, налить чашечку кофе, включить компьютер, и ты на работе!
Несмотря на такую, казалось бы, основательную подготовку к удаленке, проблемы и сложности все равно возникали. Работа из дома казалась более эффективной, так как не должно быть отвлекающих факторов, которые присутствуют в большом опен-спейс. Но мы не учли, что детей и супругов также изолируют, и нам придется делить пространство квартиры на учебный класс и рабочие кабинеты. Удаленный формат стер все границы между личной жизнью и работой, превратившись в День сурка, 24 на 7. Мы не учли, что живое общение с коллегами и друзьями дарили нам положительные эмоции, которых стало не хватать в изоляции, в связи с чем моральный дух падал. Были перебои с электричеством, проблемы с качеством интернета, не работали ссылки для подключения к собраниям, мяукали коты и гавкали собаки, дети хотели внимания, неожиданно включался микрофон и т.д. Это был непростой, но вместе с тем интересный этап в нашем проекте адаптация в новой системе и адаптация в новых условиях удаленной работы. Наш модуль взлетел строго по расписанию, но нам есть еще надо чем работать, что улучшать в системе, чтобы дальнейший полет был приятным и комфортным.
Кожевникова Наталья

Наталья, руководитель проекта со стороны команды Внедрения
На курсах по управлению проектами не рассматривают, как поступать в подобных условиях, это не имеет ничего общего с управлением команды, которая находится в разных уголках земли, это скорее управление в условиях кризисной ситуации, где можно полагаться только на свой опыт, обратную связь от команды, клиента и собственную интуицию. Мы начали внедрение с большой белой красивой доски в офисе, куда стали клеить стикеры и помечать задачи, которые необходимо сделать, ответственных, плановые даты исполнения задач. Все шло неплохо, ежеутренние стендапы, в рамках которых листочки передвигались из одного столбца в другой. Дальше настал день х, когда необходимо было решить переводить ли всех на удаленную работу или оставить часть команды в офисе. Я не боюсь удаленной работы, наоборот даже, не надо тратить время на дорогу, особенно для того, кто далеко живет, если что-то срочное, всегда можно созвониться и быстро решить вопрос, стендапы позволяют отследить, где мы находимся. Единственное, что сложно оценить, это моральный дух команды, удаленно его только по ноткам в голосе можно уловить. Было решено: удаленная работа, для тех, кто хочет, и нет условий работать дома, может приезжать в офис. Буквально за ночь были перенесены все стикеры в электронный вид- smartsheet. Немного времени на адаптацию, и все привыкли. С командой мы были готовы к такой работе. С увеличением числа заболевших также начало расти нервное напряжение у команды, т.к мы подходили к самым активным блокам работ- тестирование и обучение в июне-июле, мотивировала возможность отдохнуть осенью (график с сайта www.bbc.com/russian/features-54699497).

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

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


Пройти тестирование и обучение пользователей системы оказалось проще, чем пережить этап разработки. День сурка. Спасали только статусы у того самого Канбана, бережное отношение друг к другу и, конечно же, желание пройти это как можно скорее. Переработки никуда не делись, просто потерь (которые на самом деле очень нужны в нормальной жизни) стало минимум, когда задачи горят. Работы без пауз.
В какой-то момент команда не выдержала и вышла в офис, когда ослабили запреты. Всё в соответствии с законом! Но через 2 недели ушла. Почему? Наверное, потому что привыкли, и здесь есть некоторая критическая масса, которую нужно наполнить людьми из проекта, чтобы все остались работать в офисе.
Ющенко Андрей

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

В завершении.
Непонятно насколько продлится текущий режим работы. Неизвестно, произойдет ли это еще раз. Но знаем, что теперь мы готовы и однозначно ответ внедрять. Ниже привели топ 5, как нам удалось пережить и перейти на удаленку безболезненно:
1. Удаленное эффективное управление проектом наглядные online доски с задачами
2. Ежедневное общение с командой ежедневные online митинги
3. Постоянное общение с клиентом рабочие online встречи почти каждый день, еженедельные статусы
4. Поддерживание боевого духа день рождения с доставкой подарков, запланированные отпуска и небольшое кол-во тим билдингов и Zoom вечеринок

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

ДВС всё ещё жив микро- и мини-гибриды

02.03.2021 14:06:25 | Автор: admin
image
Уже почти половина новых автомобилей, выпускаемых в Евросоюзе, относится к микрогибридам.

На фоне кучи новостей о развёртывании инфраструктуры под новые электромобили и спорах о стандартах зарядки многие могли пропустить реинкарнацию старого подхода, который теперь называют технологией Start-Stop. Это отличный вариант не тратить энергию на повышение энтропии Вселенной, пока вы просто стоите в пробке. Если вы стоите дольше пары секунд, то двигатель автоматически отключается и не ест вхолостую топливо. Сейчас подробнее расскажу, как это работает и почему обычные батареи очень быстро умрут при таком режиме. Я как раз как бывший инженер сервис-центра видел много батарей, умерших из-за не подходящих для них нагрузок.

Хочу много лошадей из крохотного мотора


image
Фотохимический смог в Пекине.

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

Во-вторых, есть тенденция к удешевлению. Потребитель хочет получить больше лошадей за те же деньги. Если раньше нормальными считались полуторалитровые моторы в 5070 л. с., то теперь тот же самый мотор часто выдаёт 120, а то и 150 лошадиных сил. Понятно, ничто не даётся просто так. В итоге моторы требуют установки турбин, более качественного топлива, точного управления впрыском и становятся практически неремонтопригодны.

С другой стороны, снижение цикла обновления автомобиля приводит к своеобразному переходу на CICD в автопроме. Если раньше новая технология была почти незаметна на фоне большого парка старых автомобилей, то сейчас ротация происходит быстрее. Системы ABS, ESP и VSC сейчас постепенно становятся стандартами для любых машин, включая бюджетные. Собственно, классический ДВС уже далеко не тот ДВС, что был раньше. Да, на кукурузном масле и непонятном топливе из грязной канистры он ехать отказывается. Но в среднем он стал существенно мощнее и экономичнее, пусть и ценой долговечности. Вот только старые элементы пришлось существенно дорабатывать.

Стоим на светофоре


image
Так выглядит типичный график заряда-разряда во время поездки на автомобиле с системой старт-стоп. Обычные аккумуляторы убиваются с пугающей скоростью.

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

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

Гибриды, микрогибриды и все остальные


Текущий рынок привёл к тому, что между полностью электрическим автомобилем и привычным ДВС-вариантом сформировалось несколько промежуточных классов.

Традиционный ДВС это почти все бюджетные линейки машин: классическая трансмиссия, объём двигателя небольшой, чтобы соответствовать современным экологическим нормам. Запуск двигателя осуществляется с помощью обычной свинцово-кислотной батареи в 12 В.

Микрогибриды это всё те же ДВС, но уже с системой старт-стоп. Та самая первая Toyota Crown формально относится к этому классу. Ключевое отличие в стартёре, о котором мы говорили раньше. Для корректной работы он должен иметь мощность порядка 35 кВт. Обычный аккумулятор не сможет долго служить в рваном режиме работы постоянных зарядов-разрядов и многократных запусках двигателя высокими токами. Поэтому для этого типа автомобилей подходят только AGM- и EFB-аккумуляторы. Внутри AGM не традиционная серная кислота в жидком виде, а специальный абсорбированный электролит в виде пропитанных пористых стекловолоконных структур. Это позволяет ему выдерживать такие режимы работы. А у EFB пластины потольше, специальные приблуды в активную массу, да и сепаратор специальный, а на Эксайде поверх этой самой замороченной активной массы еще и сеточку из стеклоткани для устойчивости вмазывают.

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

Полный гибрид: в этой схеме скорее уже возможна поездка чисто на электроприводе на короткие расстояния. Чаще всего есть возможность подзарядить тяговый литиевый аккумулятор от зарядного устройства напрямую. Активно используется система рекуперации при торможении. В целом автомобиль намного ближе по своей структуре к электромобилям. Например, тот же ДВС стоит часто упрощённой конструкции, часто работающий не в рамках классического цикла Отто, а на базе циклов Миллера, Аткинсона. На электрический этап приходится основная, самая неэффективная для ДВС часть ползание по пробкам со скоростью 510 км/ч, когда стоит первая передача, а педаль газа не нажата.

image
Если посмотреть на текущие пропорции, то 47 % автомобилей это классические ДВС, 48 % микрогибриды, оборудованные системой старт-стоп, и остальные занимают по 1 %. Реальных чистых электромобилей исчезающе мало.

Что такое AGM- и EFB-аккумуляторы


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

AGM (Absorbent Glass Mat) это технология изготовления свинцово-кислотных аккумуляторов, при которой электролит не плещется свободно внутри, а зафиксирован на специальных губках из стекловолокна. Тонкие стеклянные волокна при этом абсолютно не входят в реакцию с серной кислотой, а за счёт волокнистой структуры они практически нечувствительны к вибрациям и механическим повреждениям. То есть даже если корпус будет повреждён, то кислота не будет литься во все стороны, как в классическом аккумуляторе, а останется питанным в стекловолокне, типа как памперс работает. Только стеклянный. Только не надо разбирать их самостоятельно и проверять. Это всё равно очень опасно. Часть микропор остаётся свободной от электролита. Это нужно для создания свободного пространства для рекомбинации газов.

image

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

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

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

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

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

Что есть интересного у нас


Немного расскажу про нашу компанию. В Exide мы производим много аккумуляторов как раз для микрогибридов сейчас это примерно 3040 % всего европейского автопарка. В новые автомобили чаще всего попадает именно аккумулятор нашего производства. Сейчас около 70 % европейских автомобильных брендов ставит именно наши линейки, но со своим брендингом.
У нас есть несколько видов батарей: AGM, EFB, Premium, Excell и Classic. Последние три классические. Excell базовый надёжный вариант с хорошей ценой.
Excell отличается более высоким стартовым током, что особенно чувствуется зимой. Ток примерно на 15 % выше, чем у Classic. А СLassic это для тех, у кого автомобиль попроще, совсем без прибамбасов, и цена имеет значение.

У Premium будут самые высокие токи холодной прокрутки примерно на 30 % выше Classic. Кроме того, выше скорость заряда из-за нашей технологии Carbon Boost 2.0. В активную массу отрицательных пластин вносится специальная углеродная добавка, которая также позволяет увеличить заряжаемость, особенно из состояния глубокого разряда, примерно вдвое. Изначально их разрабатывали именно под системы старт-стоп, но в дальнейшем включили и в классическую линейку.

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

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

Похороны временно переносятся


К полной замене автомобилей с ДВС на электромобили мы будем двигаться ещё долго: лития на нашей планете более чем достаточно. Но только небольшая часть его месторождений является коммерчески рентабельной. При этом уже сейчас электроавтомобили составляют примерно 50 % всего спроса с тенденцией роста до 75 % в ближайшие 10 лет. А ещё весёлые проблемы с выделенными линиями от электростанций до заправок, где каждая зарядка может отъедать до 150 кВт.

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

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

02.03.2021 14:06:25 | Автор: admin

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

Авторы проекта ученые и инженеры Национального института материаловедения Японии (National Institute of Materials Science, NIMS). Насколько можно понять, японцы собираются коммерциализировать свое изобретение, так что все детали конструкции батарей они не раскрывают. Но, в целом, понять что к чему можно.

Что это за элементы и зачем там алмазы?


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

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

Что касается радиоактивных элементов, то это изотопы углерода и никеля с длительным периодом полураспада. Для углерода-14 он составляет 5700 лет, а для никеля 63-100 лет. Комбинация двух изотопов позволяет увеличить время работы батареи.

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

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

Прототип есть, но кое-что нужно улучшить


Как и говорилось выше, у этого элемента питания есть как достоинства, так и недостатки. Преимущества солидные.

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

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

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

В-третьих, такие элементы надежны. Выходить из строя там особо нечему, разве что при механическом воздействии. Они могут работать даже при высоких температурах, и их можно использовать, в частности, в космическом оборудовании и машинах для разведки полезных ископаемых, сказал Сатоши Коидзуми (Satoshi Koizumi), один из авторов проекта алмазной батареи и сотрудник NIMS.

В-четвертых, конструкция батарей на алмазах проще, чем конструкция РИТЭГ на плутоне, которые используются сейчас в космических аппаратах.

НО. Как всегда есть ложка дегтя во всей этой бочке меда. А именно малая мощность батареи. Прототип выдает пока лишь 1 микроватт мощности, так что для того, чтобы обеспечить энергией космический аппарат, нужна либо огромная батарея, либо доработка элемента. И как раз в этом направлении будут действовать представители NIMS.

Алмазные батареи как тренд


Еще в августе мы писали о том, что американский стартап Nano Diamond Battery представил прототип бета-гальванической батареи, которая способна проработать тысячи лет. И да, там тоже используются алмазы и углерод-14. У американцев также есть прототип, плюс их элемент уже прошел несколько этапов тестирования.



Американский элемент питания не тайна, и протип батарейкиее изучили сторонние ученые. Безопасность и эффективность бета-гальванической батареи подтвердили в Ливерморской национальной лаборатории имени Лоуренса и Кавендишской лаборатории Кембриджского университета. Причем конкуренты прототипа батареи NDB демонстрировали 15% эффективности при производстве энергии. А у разработки калифорнийского стартапа благодаря синтетической алмазной структуре, которая выступает одновременно полупроводником и теплоотводом, эффективность достигла 40%. Внутренний стержень фонит до 28 000 лет, поэтому элементы питания будут работать гораздо дольше, чем техника, в которую они установлены.


Nano Diamond Battery предлагает бета-гальванические батареи в разных форм-факторах, включая привычные АА, AAA, 18650, CR2032 и других. Теоретически они могут работать совместно с литий-ионными батареями, установленными на большинстве современных устройств. При работе алмазная батарейка будет передавать излишки электричества литиевому аккумулятору.

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

Тем не менее, американцы сохраняют оптимизм. Представьте себе iPhone. Наша разработка полностью заряжала бы вашу батарею с нуля пять раз в час. Представьте себе это. Представьте себе мир, в котором вам вообще не придется заряжать аккумулятор в течение дня. А теперь представьте себе неделю, месяц Как насчет десятилетий? Вот что мы можем сделать с помощью нашей технологии, рассказал о разработке NDB сотрудник стартапа Нил Найкер.

Подробнее..

Перевод Вещество, которое может вызвать технологическую революцию

02.03.2021 14:06:25 | Автор: admin
Показанное на изображении устройство камера высокого давления с алмазными наковальнями используется для применения давления к лабораторным образцам.Показанное на изображении устройство камера высокого давления с алмазными наковальнями используется для применения давления к лабораторным образцам.

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


Всё, как всегда и везде, начинается с водорода. Водород пронизывает всю Вселенную. Это самый распространённый из всех химических элементов его молекула состоит всего из одного протона и одного электрона. Однако если водород в газовом состоянии это элементарно простое вещество, то при переходе из одного состояния в другое его сложность возрастает многократно. Доказательство этому колоссальное вращающееся образование диаметром 8000 миль, располагающееся под облачными вершинами Юпитера самый гигантский океан в Солнечной системе. Давления, образующегося в глубинах планеты, достаточно для того, чтобы нарушить связи между протонами и электронами и перевести элемент в новое необычное состояние: не в плазму, не в газ, а в жидкий металлический водород.

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

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

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

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

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

Чтобы оказать давление на лабораторные образцы, использовалась камера высокого давления с алмазными наковальнями. Водород окружается тонким листом из металлической фольги, и эта конструкция фиксируется между двумя алмазными наковальнями, после чего на образец оказывается давление. Изображение J. Adam Fenster / Университет Рочестера.Чтобы оказать давление на лабораторные образцы, использовалась камера высокого давления с алмазными наковальнями. Водород окружается тонким листом из металлической фольги, и эта конструкция фиксируется между двумя алмазными наковальнями, после чего на образец оказывается давление. Изображение J. Adam Fenster / Университет Рочестера.

Вначале исследовательская группа приступила к экспериментам, применяя небольшое давление (измеряемое в гигапаскалях, ГПа) к образцу плотного водорода. Водород оставался прозрачным как в видимом, так и в инфракрасном спектре. Как было сказано выше, отличительными особенностями металлов являются их блеск и непрозрачность. Однако, когда давление было увеличено до 300 ГПа, образец перестал быть прозрачным в видимом спектре. Затем давление на образец постепенно увеличивалось до 400 ГПа и выше, то есть в 4 миллиона раз больше земного атмосферного давления. Когда давление увеличилось до 425 ГПа, образец перестал быть прозрачным в инфракрасном спектре. Водород стал отражать свет, то есть получил новое свойство, и это заставило исследователей поверить в то, что образец плотного водорода перешёл в долгожданное металлическое состояние.

По мере повышения давления образец водорода начал проявлять новые свойства при взаимодействии с инфракрасным и видимым светом. Изображение Paul Loubeyre.По мере повышения давления образец водорода начал проявлять новые свойства при взаимодействии с инфракрасным и видимым светом. Изображение Paul Loubeyre.

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

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

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

Внутренняя часть резервуара с жидким водородом. Изображение NASA.Внутренняя часть резервуара с жидким водородом. Изображение NASA.

Идеально было бы использовать металлический водород в качестве ракетного топлива, так как он лёгкий и занимает малый объём. Преобразование металлического водорода обратно в молекулярный водород позволит высвобождать огромное количество энергии, сопоставимое с той энергией, которая изначально потребовалась бы для создания металлического водорода, и это превратило бы металлический водород в сверхмощное горючее, которое сможет совершить революцию в ракетостроении. Для сравнения: удельный импульс (показатель того, насколько быстро ракетное топливо выбрасывается из задней части космического корабля, а также показатель эффективности космического снаряда) используемых в настоящее время ракет составляет около 450 секунд. Удельный импульс ракет на металлическом водороде оценивается в 1700 секунд. Другими словами, выводимые на орбиту ракеты смогут иметь не две ступени, а всего одну, что позволит значительно увеличить полезную нагрузку ракет.

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

Узнайте подробности, как получить Level Up по навыкам и зарплате или востребованную профессию с нуля, пройдя онлайн-курсы SkillFactory со скидкой 40% и промокодомHABR, который даст еще +10% скидки на обучение.

Другие профессии и курсы
Подробнее..

Орбитальная станция с искусственной гравитацией наступит ли будущее в 2025 году?

02.03.2021 16:05:07 | Автор: admin
Визуализация орбитальной станции Voyager. Источник: Orbital Assembly CorporationВизуализация орбитальной станции Voyager. Источник: Orbital Assembly Corporation

В январе 2021 года Orbital Assembly Corporation (OAC) анонсировала свой амбициозный проект по созданию первой коммерческой орбитальной станции с искусственной гравитацией Voyager. Строительство начнется в 2025 году и ориентировочно через 5 лет станция должны принять первых туристов.

О проекте

Voyager представляет собой кольцо диаметром 200 м. Искусственная гравитация достигается вращением с определенной угловой скоростью. В анонсированном проекте сила притяжения на станции будет такая же, как на Луне. Ширина станции составит 20 м.

Особенность проекта Orbital Assembly Corporation его коммерческая направленность. Помимо использования станции для научных исследований, ее создатели планируют вплотную заняться космическим туризмом: на Voyager разместят 24 жилых модуля. По словам авторов, искусственная гравитация позволит функционировать даже душевым кабинами. Кроме этого, каждый жилой модуль будет снабжен отдельным шлюзом для выхода в открытый космос. Общая вместимость станции 400 человек.

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

Планы и проблемы

На конференции 29 января генеральный директор OAC Джон Блинкоу рассказал, что на первом этапе будет создан прототип станции диаметром 61 м. Причем корпорация уже запатентовала робота, который займется сборкой непосредственно на орбите: в данный момент проводятся пусконаладочные работы. Прототип будет использован в качестве испытательной площадки для проверки теорий и проведения экспериментов, которые позволят приступить к строительству Voyager.

На официальном сайте корпорации не указана итоговая стоимость проекта. Чтобы уменьшить финансовую нагрузку, в OAC решили привлечь инвесторов и выпустили акции, которые может приобрести любой желающий по цене 25 центов за штуку. Пока их количество ограничено 4 млн., соответственно итоговая стоимость акций 1 млн. долларов. Но эта сумма лишь малая часть стоимости всего проекта.

Одна из существенных статей расходов доставка частей станции на околоземную орбиту. В данный момент при использовании ракет-носителя Falcon 9, транспортировка 1 кг груза обойдется в 2000$. Если ему на смену придет Starship, то стоимость можно будет уменьшить до нескольких сотен долларов. Но учитывая проектную массу станции Voyager, которая составит примерно 2500 тонн, в обоих случаях сумма получается немаленькой 5 млрд. и 500 млн. долларов соответственно (если принять цену доставки 1 кг кораблем Starship за 200$).

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

Итого

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

Подробнее..

Ученые получили первый снимок кристалла времени

02.03.2021 16:05:07 | Автор: admin

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

Снимок сделал Максимус, ультрамощный рентгеновский микроскоп в Центре Гельмгольца в Берлине. Он дает нам представление о поведении новых кристаллов времени, которые впервые были экспериментально созданы в лаборатории в 2016 году. Открытие обещает выдающиеся новые прорывы в фундаментальных исследованиях, говорится в материале, опубликованном немецко-польской командой в Physical Review Letters.

Что такое кристалл времени

Один из экспериментов, в результате которого появился первый кристалл времениОдин из экспериментов, в результате которого появился первый кристалл времени

Вкратце, временные кристаллы это объекты, которые проявляют свойства кристаллов как в пространстве, так и во времени.

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

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

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

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

Франк ВильчекФранк Вильчек

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

Кубик льда довольно редкое явление в природе. У него низкая энтропия, он склонен к разрушению. То же самое и с временными кристалами: найти их в природе, по крайней мере на Земле, невозможно. Сам факт их существования представлялся крайне сомнительным. Структуры казались слишком эфемерными и далекими от реальности.

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

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

Идея казалась довольно странной новый вид материи, отличающийся от других своим поведением в четвертом измерении. Но в сентябре 2016-го группа ученых в лаборатории Мэрилендского университета в Колледж-Парке неожиданно не подтвердил теорию Вильчека. Онисоздали первый временной кристалл. Для этого использовалось кольцо ионов иттебрия, охлажденных почти до абсолютного ноля (0,0000000001 К). В структуре было зафиксировано нарушение временной симметрии.

Изображение эксперимента в Мэрилендском университетеИзображение эксперимента в Мэрилендском университете

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

Можно представить три ребенка, прыгающих через веревку. Андрей и Ваня её раскручивают, а Катя прыгает. Каждые три секунды руки ребят делают полный круг и возвращаются в свое изначальное положение. Веревка обходит Катю, ей нужно один раз подпрыгнуть. Между объектами установлена симметрия во времени, период которой равен трем секундам.

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

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

Установка для создания временного кристалла из ГарвардаУстановка для создания временного кристалла из Гарварда

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

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

Норман Яо, физик из Калифорнийского университета в Беркли, который в 2017-м впервые опубликовал схему для создания и отслеживания временных кристаллов, а также помогал команде Гарварда, рассказывает:

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

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

Что сейчас

Исследования свойств временных кристаллов продолжаются. Для ученых это настоящий кладезь знаний, вопросов здесь гораздо больше, чем ответов. Детальное исследование вышло в феврале в Physical Review Letters. Работу совместно провели ученые из Института интеллектуальных систем Макса Планка, Университета им. Адама Мицкевича и Польской академии наук.

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

В своем эксперименте Ник Трегер, Павел Грушецкий и другие поместили маленькую полоску магнитного материала на микроскопическую антенну, через которую они посылали радиочастотный ток. Это микроволновое поле вызвало колеблющееся магнитное поле источник энергии, который стимулировал в полоске магноны (квазичастицы спиновой волны).

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

Ник Трегер говорит в интервью, выложенном на сайте Института интеллектуальных систем Макса Планка:

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

Гизела Шютц, директор Института интеллектуальных систем им. Макса Планка, возглавляющая отдел современных магнитных систем, в статье отмечает уникальность рентгеновской камеры Максимуса, которая смогла запечатлеть этот снимок:

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

Павел Грушецкий, ученый с физического факультета Университета Адама Мицкевича в Познани, говорит:

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

Йоахим Грефе, последний автор публикации в Physical Review Letters, делает вывод:

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

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

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

Подробнее..

7 Лучших Советов по СМС Маркетингу (2021)

02.03.2021 16:05:07 | Автор: admin

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

Согласно этому отчету, 90% СМС сообщений читаются в течение 15 минут после их получения. Это означает, что 9 из 10 получателей читают ваши сообщения. Можете ли вы поверить, какой огромной силой вы обладаете для продвижения своих продуктов или услуг?

Если вы уже решили использовать СМС маркетинг для развития своего бизнеса, то представляю вашему вниманию несколько советов, чтобы начать работу:

1. Выберите поставщика услуг и не отправляйте СМС клиентам с вашего личного телефона

Первое, что нужно сделать - это выбрать надежного поставщика СМС услуг. В мире существуют сотни СМС провайдеров, и вы должны выбрать самого подходящего и доступного именно вам.Есть много компаний, которые предлагают бесплатные пробные версии. Например, вы можете использовать Dexatel - одну из самых надежных облачных коммуникационных компаний в мире. У компании есть более ста партнеров. В прошлом году эта компания получила премию Stevie Awards; и всего за несколько секунд вы сможете отправить тонны СМС сообщений по всему миру и посмотреть, как это работает для вашей компании.

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

2. Не забывайте о правовых вопросах

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

3. Давайте четкие инструкции

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

4. Тексты должны быть короткими и уместными

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

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

Вот пример текста для СМС-маркетинга:

PINKO LOVE BAG -30% на FW20 до 18.03! Только для Вас, наши дорогие.

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

5. Используйте правильную стратегию

Идеальная частота сообщений - это от 4 до 6 сообщений в месяц или 1-2 сообщения в неделю. Однако лучше всего обратиться к специалисту по маркетингу, который поможет определить подходящее количество сообщений для вашей конкретной отрасли.

По ссылке вы можете найти 16 кейсов СМС рассылок для вашего бизнеса.

6. Используйте изображения, когда это уместно

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

7. Используйте общую статистику для достижения успеха

Оценка эффективности работы СМС маркетинга очень важно для развития бизнеса. Но помимо оценки результатов вашей кампании, полезно также следить за некоторыми глобальными статистическими данными в смс маркетинге. Например, знаете ли вы, что уровень СМС спама составляет 2,8% по сравнению с 53% по электронной почте?

***

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

Подробнее..

Еще одно объяснение эффекта Мпембы (это про прочему кипяток замерзает быстрее холодной воды)

02.03.2021 18:23:53 | Автор: admin

Привет, Хабр! Представляю вашему вниманию перевод статьи "Why Hot Water Freezes Faster Than ColdPhysicists Solve the Mpemba Effect".


От переводчика: всю жизнь мучился вопросом, а тут на тебе- опять объяснили.


image


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


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


История вопроса


Аристотель первым отметил, что горячая вода замерзает быстрее холодной, но химики всегда отказывались объяснять этот парадокс. До сегодняшнего дня.


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


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


Итак, существует странный эффект Мпембы, названный в честь танзанийского студента, который обнаружил, что горячая смесь для мороженого замерзает быстрее, чем холодная в морозилке школьной кухни где-то в начале 1960-х. (На самом деле этот эффект отмечался множеством исследователей в истории, начиная с Аристотеля, Фрэнсиса Бэкона и Рене Декарта).


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


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


Новое объяснение эффекта (теперь то уж точно правильное)


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


Так что же такого в этих связях? Каждая молекула воды состоит из сравнительно большого атома кислорода, соединенного с двумя маленькими атомами водорода обычной ковалентной связью. Но если поместить рядом несколько молекулы воды, то водородные связи тоже начнут играть важную роль. Это происходит из-за того, что атомы водорода одной молекулы располагаются вблизи кислорода другой молекулы, и взаимодействуют с ним. Водородные связи намного слабее ковалентных (прим. пер. ~ в 10 раз), но сильнее чем Ван-дер-Ваальсовы силы, которые использует геккон для прилипания к вертикальным стенам.


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


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


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


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


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


Почему новое объяснение лучше предыдущих?


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


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


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


Как бы то ни было, теория у них интересная.


P.S. в 2016 один из соавторов Чанг Солнце (Chang Q. Sun) совместно с Йи Солнцем (Yi Sun) опубликовали более полное изложение предложенной теории, с рассмотрением поверхностных эффектов, конвекции, диффузии, излучения и других факторов- и вроде бы наблюдают хорошее согласие с экспериментом (Springer).


Литература


Ref: arxiv.org/abs/1310.6514: O:H-O Bond Anomalous Relaxation Resolving Mpemba Paradox


оригинал: https://medium.com/the-physics-arxiv-blog/why-hot-water-freezes-faster-than-cold-physicists-solve-the-mpemba-effect-d8a2f611e853


почему "опять объяснили"- а потому что уже было:


  1. https://doi.org/10.1103/PhysRevX.9.021060
    Неравновесные марковские процессы: могут идти по некоторым необычным траекториям сильно быстрее, чем равновесные, поэтому быстрое охлаждение кипятка сваливается на такую "ускоренную" траекторию, и обгоняет холодную воду (которая остывает в более равновесных условиях).
  2. https://pubs.acs.org/doi/abs/10.1021/acs.jctc.6b00735
    Кластеры (тоже из-за водородных связей), которые мешают кристаллизации. В кипятке такие кластеры отсутствуют, и при его замерзании не успевают сформироваться, а в воде, длительное время бывшей холодной вне морозилки- успевают, и не дают ей нормально заморозиться.
  3. https://aapt.scitation.org/doi/10.1119/1.18059
    Переохлаждение ниже точки замерзания, которое в изначально горячей воде слабее выражено, ибо беспорядка больше, а упорядочиваться в морозилке в процессе замерзания- времени не хватает. (но тут явно проблема- в экспериментах вся кривая охлаждения горячей воды идет круче холодной, а не только процесс замерзания, и этот "беспорядок" на теплопроводность и охлаждение если и должен влиять- то как раз замедляя охлаждение, а наблюдается- ускорение).
  4. https://www.sciencedirect.com/science/article/pii/S0140700716302869
    Испаряется вода с поверхности, и уносит тепло. У горячей воды- быстрее (только непонятно, почему после выравнивания температур та вода, которая была горячей- продолжает испаряться активнее, хотя она уже холоднее той воды, которая изначально была холодная).
  5. https://www.sciencedirect.com/science/article/pii/S0017931014008072
    Всему виной конвекция, которая улучшает теплообмен (конвекционные потоки крутятся по инерции и после того, как температура стаканов выровнялась и еще долго после этого).
  6. American Journal of Physics 77, 27 (2009); https://doi.org/10.1119/1.2996187
    Во всем виновато растворение примесей (газов?). В кипятке примесей меньше, замерзание быстрее.
Подробнее..

Где разместить оборудование для майнинга

02.03.2021 18:23:53 | Автор: admin

К нам в дата-центр начали приносить оборудование для майнинга в 2010 году. Тогда это всё было в диковинку. Наши сотрудники тоже тогда увлекались этой темой и майнили на обычных ATX и Big Tower. Я на всё это смотрел скептически. Государства никогда не отдадут печатный станок и налогообложение. Но спрос рождает предложение. Да и за последние 10 лет криптовалюты серьёзно продвинулись.

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

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

И самое интересное, это компании однодневки, которые собирали оборудование и пропадали или воровали электричество и становились фигурантами уголовных дел.

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

Все кидаются майнить на пике

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

Нужно иметь стратегическое мышление. Майнинг это игра вдолгую, как и фондовый рынок. Это на пенсию или лет на 10-20. В среднем, скорее всего, вырастет и накопления сохраните и преумножите. Но локально будете бегать за новостными волнами скорее всего проиграете, так как когда новость до вас дошла, то её уже 10 раз отработали на биржах.

Цена электричества не первостепенна

Обратились ко мне в Европе люди. Я им предложил, давайте в России. Они отказались.

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

Узнайте сколько лет существует компания. Пережила ли прошлый пик и спад?! У нас есть кейсы клиентов, как их кидали на оборудование, есть кейс наших конкурентов, которые закрылись. Например, к нам обратился клиент, который уже почти год пытается вернуть своё оборудование из майнинг-отеля однодневкии вернул только половину из вывезенного (все распродали по частям). Клиент поделился, что вывезли все за одну ночь. Наши конкуренты с той же ценой за электричество на момент старта не поднимали цены для своих клиентов вслед за ростом тарифов и в итоге закрылись, глубоко перейдя точку безубыточности, так как таким образом был составлен их договор. Мы уже рассматривали важность простого и понятного договора в статье Хороший договор - короткий договор.

Что неважно для майнинг-отеля

В статье Аренда стойки в дата-центре или как выбрать ЦОД мы перечислили огромное количество параметров, которые должны быть в дата-центре.

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

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

Фальшпол, стойки, 100% uptime, резервирование питания через ИБП и ДГУ для майнинга не нужны. Это ведёт только к удорожанию цены. Тем не менее важным остаётся качество связи. Майнинг-отели на дешёвых домашних маршрутизаторах с 3G-модемами не смогут обеспечить приемлемое качество связи, низкий ping, низкий jitter, нулевую потерю пакетов, а следовательно не все решения будут приняты пулами именно из-за проблем со связью, просто потому, что кто-то успеет передать решение быстрее.

Что важно для хостинга оборудования для майнинга

  1. Фиксированная стоимость, не зависящая от курса. Майнинг-отель не должен брать никакую комиссию от объёма намайненого или привязывать цену к курсу криптовалюты

  2. Отличный ping и резервирование каналов связи.

  3. Никаких своих пулов и комиссии с намайненного.

  4. Легальное электричество. Будет очень неприятно узнать, что всё оборудование арестовано полицией из-за того, что майнинг-отель воровал электричество

  5. Стабильная температура.

  6. Профессиональные инженеры технической поддержки.

  7. Собирать фермы надо в юнитовых корпусах, а не колхоз на палках.

  8. Хорошо, если у компании есть лицензии.

Охлаждение майнинг-оборудования

Зимой охлаждается приточной вентиляцией. Неразумно гонять промышленные кондиционеры. Летом нужны кондиционеры. И стоит убедиться в их наличии. Уже были примеры когда оборудование размещали просто в залах с высокими потолками, но летом в России бывает жара под 40 и надеяться на охлаждение естественным путём не стоит. Охлаждение оборудования в контейнерах также сопряжено с рядом проблем. Во-первых высокая плотность оборудования при небольшом объёме. Во-вторых металлический контейнер быстро нагревается не только оборудованием, но и прямыми солнечными лучами. Были случаи, когда мощные вентиляторы затягивали вместе с наружным воздухом дождь или снег, что приводило к выходу из строя дорогостоящего оборудования

Как выбрать где разместить оборудование для майнинга

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

  1. данные о компании;

  2. технические параметры площадки для майнинга;

  3. лицензии;

  4. полнота предоставляемых услуг;

  5. стоимость.

Все собранные данные следует свести в таблицу Google Sheets, привести качественные данные к количественным путём экспертной оценки, например. Ввести весовые коэффициенты значимости. Задать формулу вычисления итоговой оценки, которая позволит получить объективное сравнение. Обязательно предварительно посетите дата-центр с ознакомительной экскурсией.

Данные о компании поставщике

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

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

  1. Возраст компании. Год основания по выписке из ЕГРЮЛ.

  2. Совпадает ли юридический адрес регистрации с фактическим адресом.

  3. Среднесписочная численность.

  4. Обороты за прошлые годы.

  5. Налоги и зарплатные взносы.

  6. Судебные дела.

  7. Исполнительные производства.

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

Контакты руководства

Без обратной связи системы не работают! Гарантией качественного оказания услуг и обслуживания являются контакты руководства в открытом доступе, если вы не хотите слушать всякую чушь от рядовых работников типа "к сожалению у нас все устроено по-другому, но мы учтем ваши пожелания". Любой сотрудник должен знать, что если он плохо обслуживает клиента, то клиент может пожаловаться напрямую руководителю компании. В противном случае общение с такими компаниями как со стенкой. Так с нами общаются банки, Яндекс, Гугл, hh.ru и многие другие. За многие годы мы ни разу не смогли добиться ни от одной крупной организации улучшения ее бизнес-процессов и качества обслуживания.

Отзывы и реакция на них

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

История компании

На сайте nalog.ru выписка из ЕГРЮЛ скажет о многом. Как долго существует компания, как часто в ней менялось руководство, владельцы.

Местонахождение серверной

Размещать оборудование для манинга мы советуем географически в том регионе, куда вам недалеко ехать. Если вы разместите оборудование за несколько тысяч километров от вас, то если что-то случится, приехать туда для вас будет целая проблема.

Технические параметры машинного зала

Аварии, простои, uptime

У серверной есть такое понятие как uptime время бесперебойной работы с момента запуска. Uptime серверной можно также измерять и в относительных единицах процентах. Как считается uptime сервера в процентах? Из 100% вычитаем время простоя серверной, деленное на все время эксплуатации майниг-отеля. От чего зависит время простоя машинного зала:

  1. отказы программного обеспечения сервера;

  2. отказы оборудования для майнинга (асики, GPU-фермы могут выходить из строя и требовать ремонта);

  3. перебои в работе майнинг-отеля:

    • отказы или аварии на системе охлаждения;

    • аварии в системе электроснабжения;

    • аварии на маршрутизаторах и каналах связи, DDOS-атаки;

Абсолютный 100% uptime редко бывает. Но для майнинга 99.5% вполне достаточный уровень. Можно говорить о локальном uptime на заданном отрезке времени и как показано выше, нужно, как минимум, различать три различных вида бесперебойной работы. Аварии были, есть и будут везде и всегда. Какие-то случаи можно минимизировать, где-то можно сократить время их устранения, но избавиться от них совсем невозможно. Можно минимизировать человеческий фактор, но невозможно избавиться от выхода из строя оконечного оборудования.

Лицензии на услуги связи

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

О технической поддержке и доступе к оборудованию

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

Каналы

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

Минимальный ping имеет решающую роль. Для анализа качества каналов связи обратите внимание на:

  • значение ping;

  • среднее время на соединение;

  • среднее время ответа DNS-сервера на получение IP-адреса по домену;

  • время бесперебойной работы и аварии за последние несколько лет;

  • реальная скорость загрузки данных.

Кто является производителем электрооборудования?

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

В каком помещении должен и не должен находиться майнинг-отель

Майнинг-отель не должен находиться в подвале, бункере, бомбоубежище, потому что есть угроза его затопления!

Майнинг-отель не должен находиться в бомбоубежище, потому что бомбоубежище могут попросить освободить в 24 часа!

Он также не должен находиться в офисном здании, потому что неприятный гул от работы оборудования распространяется по всему зданию!

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

В цехах завода с высокими потолками летом будет проблема с отведением тепла.

Майнинг в контейнерах плохая идея, так как демонтировать и выносить оборудование даже не нужно, подъехали, краном подцепили и украли. А вот из серверной так просто не вытащишь за 5 минут.

Безопасность

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

Доступ непосредственно в машинный зал должен осуществляться в присутствии инженера.

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

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

В майнинг-отеле должны быть камеры, полностью просматривающие все подходы и проходы к майнинг-отелю и внутри него. Глубина хранения архива должна составлять не менее 30 дней.

Полнота предоставляемых услуг

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

  1. Возможность оплаты картами, электронными деньгами и другие способы оплаты.

  2. Получение актов, счетов-фактур по каналам электронного документа оборота (ЭДО).

  3. Получение кассового чека в соответствии с 54-ФЗ.

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

  5. Поддержка по телефону, электронной почте, заявках ЛК, чату на сайте и в Telegram.

  6. Клиентская отдельная комната для работы с оборудованием.

  7. Кухня возможность попить чай, кофе и перекусить.

  8. Складское помещение и камеры хранения.

  9. Мониторинг и администрирование клиентских ресурсов.

Стоимость

Сравнивать цены на услуги майнинг-отеля смысла почти не имеет. Данный пункт идёт последним по важности. На горизонте 2-3 лет важно не на электричестве копейку сэкономить, а найти надёжного поставщика услуг, который не исчезнет.

Итоговый чек-лист характеристик майнинг-отеля

Параметр

Значение

Вес, формула

Оценка

Возраст юрлица по ЕГРЮЛ

19 лет

0.1

1.9

Юр. адрес совпадает с фактическим

1

1

1

Среднесписочная численность

17

0.1

1.7

Обороты за последние 5 лет.

150 млн

0.02

3

Налоги и зарплатные взносы

700 тыс.

0.002

1.4

Судебные дела

1

1

Исполнительные производства

1

-1

-1

Контакты руководства

1 - да, 0 - нет

1

1

Отзывы

1

1

1

История компании по ЕГРЮЛ

1

1

1

Местонахождение дата-центра

2 в пределах МКАД, 1 за МКАД, 0 - далеко от МКАД

1

2

Лицензии на услуги связи

1

1

1

Круглосуточная поддержка

1

1

1

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

1

1

1

uptime

2 года

1

+2

Наличие АВР и двух независимых лучей

1

1

1

Время реакции на обращение

до 10 мин

(10 - 10)0.1

0

Наличие SLA

1

1

1

Оплаты картами

1

1

1

Оплата электронными деньгами

1

1

1

ЭДО

1

1

1

Кассовый чек (54-ФЗ)

1

1

1

Поддержка в Telegram

1

1

1

Подробнее..

PVS-Studio вступает в битву с захардкоженными паролями

02.03.2021 18:23:53 | Автор: admin

PVS-Studio статический анализатор, позволяющий обнаружить множество проблем, скрытых в исходном коде. Среди них также присутствуют ошибки, связанные с безопасностью приложений. К примеру, недавно анализатор научился определять наличие в коде конфиденциальных данных, таких как пароли. Данная потенциальная уязвимость находится в списке OWASP Top Ten и является куда более опасной, чем может показаться на первый взгляд. В чём же эта опасность состоит и как статический анализатор может от неё уберечь? Что ж, об этом (и не только) и написана данная заметка!

Мы продолжаем развивать PVS-Studio как SAST решение и планируем научить анализатор находить ещё больше ошибок, связанных с безопасностью, в коде на C, C++, C# и Java. Более подробно об этих планах (и не только) можно прочитать в статье "Дорожная карта PVS-Studio на 2021 год".

О хранении секретных данных в коде

Одним из вариантов развития поддержки SAST является добавление новых диагностических правил, реализующих проверку соответствия кода различным стандартам. Среди последних нововведений в C#-анализаторе стала проверка наличия в исходниках конфиденциальных данных. Хранение таких данных в коде противоречит пункту 2.10.4 OWASP Application Security Verification Standard (ASVS):

Verify passwords, integrations with databases and third-party systems, seeds and internal secrets, and API keys are managed securely and not included in the source code or stored within source code repositories. Such storage SHOULD resist offline attacks. The use of a secure software key store (L1), hardware TPM, or an HSM (L3) is recommended for password storage.

Риски, связанные с небезопасным хранением конфиденциальных данных в коде, входят в список OWASP Top Ten. В Common Weakness Enumeration (CWE) также присутствуют 2 позиции, связанные с данным вопросом: CWE-798 и CWE-259. Несмотря на это может возникать вопрос в чём же состоит опасность?

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

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

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

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

Кроме того, потенциальную опасность представляет тот факт, что данные, хранящиеся в исходниках, доступны всем программистам, которые с ними работают. В то же время, пользователь, установивший ту или иную систему для своих нужд, едва ли будет рад узнать, что компания-разработчик в любой момент может получить полный контроль над используемой им системой а следовательно, получить различные секретные данные самого пользователя и т. д. Найденные в списке Common Vulnerabilities and Exposures (CVE) вхождения говорят о том, что такие ошибки рано или поздно обнаруживаются. И при этом, конечно же, выставляются на всеобщее обозрение.

Как было сказано ранее, уязвимости, связанные с захардкоженными конфиденциальными данными, не редкость: среди CVE можно отыскать множество примеров. Один из них CVE-2012-5862. Система, о которой сообщается в данной позиции CVE, содержала файл "login.php", в котором присутствовал следующий код:

$password = mysql_escape_string($_POST['password']);if (crypt($password,salt)=='satIZufhIrUfk'){  $sql_pthr_ = "SELECT user,password FROM account WHERE livello = 0";  ....}if ($password=='astridservice' and $stilecustumization=='astrid'){ // <=  ....}if (crypt($password,salt)=='saF8bay.tvfOk'){  $sql_insert="INSERT INTO account(user,password,livello,nome) VALUES                 ('sinapsi','sinapsi','0','Amministratore Sinapsi')";  ....}

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

C#-анализатор PVS-Studio обнаруживает хранение конфиденциальных данных с помощью диагностического правила V5601. К примеру, взгляните на C#-код, напоминающий вышеприведённый пример:

string password = request.GetPostValue("password");....if (password == "astridservice" && stilecustomization == "astrid") ....

Проанализировав данный код, PVS-Studio сформирует следующее предупреждение:

V5601 Suspicious string literal could be a password: 'astridservice'. Storing credentials inside source code can lead to security issues.

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

Примечание. Стоит отметить, что V5601 принадлежит группе диагностических правил OWASP. Данная группа появится в PVS-Studio с выходом версии 7.12. По умолчанию OWASP-правила будут отключены, однако это можно легко изменить, используя, к примеру, интерфейс плагина для Visual Studio или Rider либо же напрямую редактируя файл настроек.

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

  • CVE-2004-1920 роутер с super-логином и super-паролем;

  • CVE-2004-2556 точка доступа с super-логином (опять) и не-super-паролем "5777364";

  • CVE-2004-2557 результат "исправления" CVE-2004-2556 (по крайней мере, логин больше не super);

  • CVE-2012-1288 захардкоженные данные аккаунта администратора;

  • CVE-2012-2949 захардкоженный пароль в приложении на Android

  • и т. д.

Ещё один повод запускать анализ регулярно

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

Во многих случаях удобным вариантом будет настройка анализа коммитов и pull request'ов. Это ещё сильнее повысит безопасность разрабатываемого приложения. Ведь код, содержащий ошибки, никак не попадёт в основную ветку репозитория. Это будет настоящим спасением в том случае, если разработчик вдруг забыл провести анализ. Более подробно про то, как настроить проверку pull request'ов, можно почитать в документации (см. раздел "Развёртывание анализатора в облачных CI").

Новая же возможность поиска конфиденциальных данных в коде ещё раз подтверждает необходимость регулярного проведения анализа: как на компьютерах программистов, так и в рамках CI. Ведь даже если программист заложит в исходники какие-нибудь пароли, то анализатор сообщит ему об этом. При необходимости разработчик может посмотреть документацию по диагностике V5601, чтобы понять, в чём именно состоит опасность.

Если же анализ проводится редко, то выходит, что захардкоженные данные будут долгое время храниться в исходниках. Для open-source проекта это совсем плохо к тому времени, как анализатор позволит обнаружить проблему, данные уже нельзя будет считать конфиденциальными. Тем не менее, не защищены от подобной ситуации и другие проекты. Что если пользователь получит, скажем, бета-версию приложения? Такую как раз могут выдать между релизами. Если регулярные проверки исходников не проводятся, код в такой версии не будет проверен статическим анализатором. Получается, что все данные, "спрятанные" в исходниках, опять оказываются в открытом доступе.

Заключение

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

А как насчёт того, чтобы попробовать использовать PVS-Studio на своих проектах? Сделать это можно совершенно бесплатно, перейдя по ссылке и заполнив простенькую формочку. Ну, а у меня на этом всё, спасибо за внимание и до новых встреч!

Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Nikita Lipilin. PVS-Studio Clashes with Hardcoded Passwords.

Подробнее..

Почему учетная система не может заменить PIM в e-commerce

02.03.2021 18:23:53 | Автор: admin

Сравниваем функции управления контентом для e-commerce

Мой коллега Александр Злотко, Chief Revenue Officer Scallium, сравнил функции стандартной учетной системы и PIM-системы для товарного e-commerce проекта (к примеру, классического маркетплейса). Делюсь его анализом.

Профессиональные PIM-системы автоматизируют ключевые процедуры на всех этапах жизненного цикла товара:

  • Импорт первичных данных в процессе заведения нового товара;

  • Обогащение данными и поддержка в актуальном состоянии информации о товаре;

  • Экспорт информации о товарах в различные каналы продаж.

Когда речь идет о небольшом производстве и ограниченном ассортименте продукции, в качестве PIM могут использоваться различные бэк-офисные системы: учетная, ERP, CMS.

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

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

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

Задача

Учетная система/ERP

PIM-система

Создание новых карточек товаров

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

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

Есть механизм атрибутов, групп атрибутов и наборов атрибутов.

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

Изменение существующих карточек товаров

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

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

Управление медиа-файлами (rich content)

Изначально не проектировалась для работы с тяжелыми медиа-файлами: картинки разных размеров и форматов, видео.

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

Процесс обновления медиа-файлов очень болезненный.

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

Кабинет мерчанта

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

Реализован полноценный личный кабинет для мерчанта, который включен в базовую поставку продукта PIM.

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

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

Например, если мерчант уже работает на Яндекс.Маркет, он сможет использовать тот же файл при импорте данных в PIM.

Мерчант может принимать участие в процессе модерации товаров и общаться с контент-менеджерами посредством встроенного чата.

Ролевая модель работы с товарами

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

Гибкий инструмент для построения ролевой модели данных. Определение прав доступа согласно должностным инструкциям.

Настройка процесса работы с товарами

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

Универсальный механизм настройки воркфлоу для разных объектов системы. С их помощью можно указать статусы объектов, возможные переходы, уведомления, настроить обязательность внесения какой-либо информации в атрибуты объекта.

Логирование, история изменений, распределение товаров в процессе модерации

Нет стандартного функционала мониторинга кто, когда и какие изменения вносил в карточку товара.

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

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

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

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

Работа с каналами продаж

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

Есть стандартные интерфейсы, с помощью которых можно интегрировать PIM с любой внешней системой (Rest API, интеграционная шина). Также, в коробочном продукте есть стандартные коннекторы к самым популярным маркетплейсам Украины и России.

Каждый новый релиз в текущем и следующем году будет обогащаться новыми коннекторами к маркетплейсам СНГ, Европы и США.

Работа с большим ассортиментом и большим количеством SKU

С ростом количества SKU в системе падает ее производительность.

Есть опыт хранения около 80 млн SKU и ежедневного обновления около 20 млн офферов (предложений).

Еще раз подчеркнем, что сравнение ни в коем случае не говорит о том, что какие-либо учетные системы недостаточно хороши. Просто они создавались под другие задачи. А управление товарным контентом это задача системы PIM.

Больше о технологиях PIM читайте в предыдущих материалах этого блога.

Подробнее..

De-Flash Как вы справляетесь?

02.03.2021 16:05:07 | Автор: admin
Как всем известно, компания Adobe отказалась от поддержки и выключила flash начиная с 1 января 2021 года. Росбанк активно сотрудничает с компанией SAS крупнейшей в мире частной IT-компанией, специализирующейся на разработке решений и услуг в области бизнес-аналитики. Большинство продуктов SAS используют flash-зависимые компоненты, которые так и или иначе должны быть заменены на flash-независимые или требуют миграции данных на другое ПО, которое уже не использует flash. Сегодня мы хотим рассказать, как мы решали эту задачу, и узнать у сообщества, как аналогичная задача решалась в других компаниях.





Первое, что мы сделали, это заморозили браузер с выключенным 80 портом и рабочей версий flasha. Полагаю, так поступило большинство.

Второй шаг вполне возможно использовать как целевое решение использовать браузер Maxthon 5 с выключенным 80 портом и забыть про необходимость дефлэшатизации. Решение выбрано в связи с особенностью версии браузера, который не будет обновляться сам (финальная версия) и использует 27 версию flash-плеера, который также обновляться уже не будет.

Третье и самое затратное это обновление ПО до flash-независимой версии. Такая задача потребовала усилий со стороны вендора SAS, со стороны команды внедрения ООО Глоубайт и со стороны команды IT банка. Со стороны вендора необходимо было переработать flash-зависимые модули на HTML5 и предоставить инструмент для обновления существующих экземпляров системы. Со стороны команды внедрения выбрать стратегию обновления и проработать план с учетом особенностей внедрения и его кастомизации. Со стороны команды IT согласовать подход с бизнес-заказчиком и обеспечить выполнение работ на производственных средах.

Для продуктов SAS существует два варианта обновления системы. Первый это update-in-place. По сути, это большой патч для платформы SAS с обновлением продуктов, который устанавливается на существующую рабочую среду. Разумеется, что первая установка производится на непромышленных стендах: здесь может потребоваться и провести слияние кода в кастомизированных частях продукта, если такие кастомизации были, и провести регрессионное тестирование. И только следующим шагом будет обновление пред-промышленных и промышленных стендов.

Однако update-in-place возможен не всегда: например, когда продукт эволюционировал и новая версия построена на другой архитектуре и другом техническом стеке. В этом случае необходима полноценная миграция на новую версию ПО это второй вариант обновления ПО SAS.

И именно в такой ситуации оказалось решение SAS AML. Наше достижение последних лет запуск и реализация первой очереди масштабного проекта по построению AML системы для департамента финансового мониторинга. Особенностью данного проекта является то, что это первый проект в банке, в рамках которого в полной мере были задействованы возможности новой платформы онлайн-обработки данных ODPP. В ходе первой фазы были реализованы требования обязательного контроля и отчетность. С конца 2019 года запущена вторая фаза проекта, предполагающая развитие функционала в области выявления сомнительных операций и online-контроля. В промышленном режиме работает версия SAS AML 6.3 на платформе SAS 9.4 M3, а новая версия решения SAS AML 8.2 представлена на обновленной платформе SAS Viya 3.5. Новая платформа построена на новой микросервисной архитектура и включает в себя новые продукты, поэтому при миграции на новую версию одну часть функциональности необходимо адаптировать, другую реализовать заново.

Цель, которая перед нами стояла, выполнить задачу по дефлешезации и выдержать строки второй фазы проекта. Для системы SAS AML выбрали последовательную миграцию в два этапа.
На первом этапе необходима миграция flash-зависимых модулей, что позволит снять острую проблему и уйти от заморозки браузера. Основной модуль, требующий дефлешезации, это SAS Visual Analytics инструмент для создания и визуализации аналитических и управленческих отчетов. Помимо выделения нового оборудования и развертывания новой версии SAS VA 8.5 на платформе SAS Viya 3.5, потребуется решить несколько обязательных задач, таких как интеграция решений и настройка ETL-процессов, так и ряд задач, обеспечивающих прозрачность и удобство работы пользователей, например, настройка сквозной аутентификации (single sign-on), чтобы избежать повторного ввода данных. В следующем этапе полная миграция на новую версию решения SAS AML 8.2: с переносом полной функциональности системы, настройкой интеграций, запуском новой системы в опытно-промышленную эксплуатацию и поддержкой существования двух систем на переходный период.

Коллеги, поделитесь опытом: как вы справились с задачей De-Flash?

Автор статьи @DSSD
Подробнее..

Тотальная система контроля ПДД а почему бы и нет?

02.03.2021 14:06:25 | Автор: admin

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

Неужели при наличии современных технологий у этой проблемы нет системного решения ?

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

Итак, для кардинального сокращения нарушений ПДД предлагается разработка тотальной системы контроля Правил дорожного движения, далее - СК ПДД. Структурно такая система должна состоять из :

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

  • центра обработки и хранения данных, полученных с полицейских компьютеров;

  • соответственная законодательная и нормативная база.

Основной функционал СК ПДД представляется следующим (это далеко не полный список, в реальности функций может быть намного больше):

  • автоматическое выявление нарушений ПДД в реальном времени по информации от полицейского компьютера автомобиля: превысил скорость, проехал через квартал, оставил автомобиль не на стоянке - получи штраф в обязательном порядке;

  • автоматическое принятие решения о начисление штрафов. Штрафоваться водитель должен за КАЖДОЕ нарушение ПДД, в этом залог общего порядка на дорогах, штрафов может быть неограниченно много - ровно по количеству нарушений;

  • вывод информации о нарушении ПДД и суммы штрафа водителю в реальном времени - будет очень отрезвлять дорожных нигилистов;

  • идентификация личности водителя - прекратятся споры и подлоги типа "а за рулем не я был", будет штрафоваться не автомобиль (как иногда в случаях с видеокамерой на дорогах), я вполне конкретное физическое лицо;

  • фиксация параметров движения автомобиля с целью определения юридической ответственности водителя в случае ДТП - сопоставление данных с автомобилей участников ДТП в большинстве случаев поможет однозначно определить виновного;

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

  • прекратятся эти бесконечные остановки автомобилей на дорогах с "целью проверить документы" - просто смысла не будет, при необходимости правоохранители и так будут обладать необходимой для них информацией;

  • и т. д,

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

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

Отступление. Вообще-то идея "Бортовых автомобильных самописцев" и "Черных ящиков" в последнее десятилетие предлагалась неоднократно, и даже были разработаны некие устройства. Однако все идеи по их использованию сводились к банальному сохранению информации при ДТП или к сбору информации для проезда по платным дорогам.

Необходимо сделать оснащение полицейским компьютером каждого автомобиля ОБЯЗАТЕЛЬНМ на законодательном уровне, а создание СК ПДД должно стать общенациональной задачей.

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

Отступление. Сейчас многие начнут говорить, что вот теперь-то "большой брат" точно будет знать про всех всё, и это ужасно, и поэтому СК ПДД не нужна. Я возражу - во первых, не "кто-то" будет знать о вас всё, а "что-то". И это что-то является всего лишь информационной системой, которая будет использована по закону (я надеюсь). Во вторых, я согласен, чтобы мои данные где-то хранились в обмен на безопасность на дорогах.

Я искренне полагаю, что СК ПДД позволит значительно снизить аварийность на наших дорогах и поднять комфортность нашей жизни в целом.

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

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

Подробнее..

Категории

Последние комментарии

© 2006-2021, personeltest.ru