...

суббота, 18 января 2020 г.

[Перевод] Насколько запутанна квантовая система? Ответ может быть невычислим

Доказательство на стыке чистой математики и теории алгоритмов возвышает «квантовую запутанность» на совершенно новый уровень.

Квантовая запутанность находится в сердце нового математического доказательства.Credit: Victor De Schwanberg/Science Photo Library


Альберт Эйнштейн однажды отметил, что квантовая механика должна позволять двум объектам оказывать влияние друг на друга мгновенно даже на огромных расстояниях, назвав это явление “мистическим дальнодействием” [1]. Спустя десятилетия после его смерти эксперименты подтвердили существование этого явления, но до сих пор остается неясным, насколько скоординированными могут быть объекты в природе. Пять исследователей говорят, что они нашли теоретическое обоснование тому, что ответ в принципе невозможно получить.
Статье на 165 страниц, которую команда выложила на репозиторий препринтов arXiv [2], еще предстоит пройти рецензирование. Если результат подтвердится, он разом решит целый набор связанных проблем в чистой математике, квантовой механике и в теории алгоритмической сложности. В особенности интересно, что он ответит на математический вопрос, остававшийся нерешенным больше 40 лет.

Если доказательство подтвердится, это будет “супер-красивый результат”, как говорит Стефани Вернер, физик-теоретик из Технологического Университета Дельта в Нидерландах.

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

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

“Что самое потрясающее, что именно квантовая теория алгоритмической сложности оказалась ключом к доказательству” говорит Тоби Кубитт, специалист по теории квантовой информации из Университетского Колледжа в Лондоне.

Новости о статье быстро разошлись волной воодушевления по социальным сетям после публикации статьи 14 января. “Я думал этот вопрос окажется одним из тех, что требует сотни лет для решения” затвиттил Джозеф Фитцсимонс, исполнительный директор стартапа Horizon Quantum Computing из Сингапура.

“Я тут сру кирпичами” комментирует другой физик, Mateus Araújo из Австрийской Академии Наук в Вене. “Никогда бы не подумал, что в моей жизни увижу решение этой проблемы”

Наблюдаемые свойства


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

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

Но статья Вадика и соавторов доказывает, что ответ — нет: в принципе могут существовать квантовые системы, которые нельзя приблизительно описать конечными системам. Согласно работе физика Бориса Цирельсона [4], которые переформировал задачу, это также значит, что невозможно посчитать количество корреляции, которые две такие системы проявят, будучи запутанными.

Несоизмеримые области


Доказательство оказалось сюрпризом для сообщества.”Я был уверен, что проблема Цирельсона должна иметь положительный ответ” написал Araújo в своем комментарии, добавляя, что результат пошатнул его убеждённость в том, что “Природа в некотором смысле фундаментально конечна”.
Но исследователи только начали осознавать все последствия результата. Квантовая запутанность находится в самом сердце зарождающейся области квантовых вычислений и квантовых коммуникаций и может быть быть использована для создания супер-защищенных сетей. В частности, измерение количества корреляции между запутанными объектами в системе сообщения может дать доказательство надежности сети от прослушивания. Но, как говорит Венер, новый результат вряд ли будет иметь последствия для технологии, так как все практические применения используют конечные квантовые системы. На самом деле, говорит она, даже сложно представить, как должен выглядеть эксперимент, проверяющий квантовую странность бесконечной системы.
Сочетание теории сложности, квантовой информации и математики значит, что лишь немногие ученые могут похвастаться тем, что они понимают все грани новой статьи. Сам Конн сказал Nature, что он не достаточно квалифицирован, чтобы давать комментарий. Но он также добавил, что он удивлен количеством последствий этого результата. “Потрясающе, что эта проблема оказалась столь глубока, я никогда не мог предположить этого!”

Литература


[1] Einstein, A., Podolsky, B. & Rosen, N. Phys. Rev. 47, 777 (1935).
[2] Ji, Z., Natarajan, A., Vidick, T., Wright, J. & Yuen, H. https://arxiv.org/abs/2001.04383 (2020).
[3] Connes, A. Ann. Math. 104, 73–115 (1976).
[4] Tsirelson, B. Hadronic J. Suppl. 4, 329–345 (1993).

От переводчика


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

А еще о проблеме Цирельсона есть очень интересная презентация, где сама задача рассматривается очень подробно.

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

Let's block ads! (Why?)

Компьютер, который отказывается умирать

«Время жизни» технологий сократилось — смартфоны можно менять хоть каждый год. Но пока еще есть оборудование, которое работает на протяжении десятилетий и, вероятно, проработает еще долгие годы. Одна из таких систем — японский FACOM 128B, введенный в эксплуатацию в 1958 году.


Фото — Daderot — PD / На фото: последователь FACOM 128B — FACOM 201A

Как появился FACOM


В начале 1950-х ЭВМ строили на электронных лампах — их использовали в первом коммерческом компьютере IBM Model 701. Эти элементы были сложны в обслуживании и часто выходили из строя. Поэтому некоторые компании выбрали иной путь и занялись разработкой электромеханических компьютеров на базе реле и переключателей. Среди них была японская корпорация Fujitsu. Она планировала составить конкуренцию американскому «голубому гиганту».

В 1954 году Тосио Икэда (Toshio Ikeda), глава отдела компьютерных технологий Fujitsu, инициировал разработку новой вычислительной системы. В ней роль логических элементов играли коммутационные реле, использовавшиеся на телефонных станциях. Инженеры компании использовали 4500 таких реле и собрали из них компьютер FACOM 100. Спустя два года свет увидела улучшенная версия системы — FACOM 128A, а в 1959-м — FACOM 128B.

Особенности компьютера


Производительность Fujitsu была значительно ниже, чем у машин на электронных лампах. Например, IBM 701 тратил на операцию сложения около 60 миллисекунд. FACOM 128B аналогичную задачу выполнял за 100–200 миллисекунд. На умножение двух чисел у него уходило до 350 миллисекунд, и куда больше на сложные логарифмические операции.

Недостаток в производительности FACOM 128B восполнял надежностью и простотой обслуживания. Все арифметические операции выполнялись в десятичной системе счисления, а числа кодировались двоично-пятеричным кодом (bi-quinary). Для обозначения числа в памяти выделяли семь бит — 0 5 и 0 1 2 3 4, что позволяло закодировать любую цифру от нуля до девяти, «зажигая» два бита в последовательности.


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

Компьютер FACOM 128B использовали вплоть до 1970-х годов. С его помощью проектировали специальные линзы для фотокамер и NAMC YS-11 — первый пассажирский авиалайнер, построенный японцами после окончания Второй мировой войны.

Как дела у FACOM сегодня


FACOM 128B уже не применяют для каких-либо серьезных расчетов и вычислений. Машина превратилась в полнофункциональный музейный экспонат, установленный в «зале славы» фабрики Fujitsu Numazu Plant в городе Нумадзу.

За работоспособностью компьютера следит единственный инженер — Тадао Хамада (Tadao Hamada). По его словам, он «останется на посту» до конца своей жизни, так как хочет сохранить технологическое наследие Японии для потомков. Он отмечает, что ремонт системы не требует значительных усилий. FACOM 128B настолько надежен, что в нем нужно заменять всего одно реле в год, несмотря на ежедневные демонстрационные запуски.


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

Другие «долгожители»


Еще один компьютер, который продолжает работать с 50-х годов прошлого века установлен в американской компании Sparkler Filters (поставляет устройства фильтрации). Эта машина — IBM 402, которая представляет собой электромеханический вычислитель, считывающий информацию с 80-колонных перфокарт. Считается, что это последний полностью функционирующий IBM 402 на планете.

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


Фото — Simon Claessen — CC BY-SA

Пока что в компании не планируют переходить на современные вычислительные системы и отказываться от уникального компьютера. Но есть вероятность, что в будущем IBM 402 попадает в Музей компьютерной истории. Его представители в прошлом уже связывались со Sparkler Filters, но тогда переговоры ни к чему не привели.

Другой пример компьютера-долгожителя — DEC MicroVAX 3100, который с 1987 года используют в компании Hecla Mining, добывающей серебро и другие драгоценные металлы. Компьютер установлен на станции на Аляске, где с его помощью оценивают параметры руды и печатают этикетки для образцов. Кстати, за последние отвечает такой же старый принтер. Что интересно, семь лет назад, один из инженеров Hecla Mining в тематическом посте на Reddit отметил, что «ему нет нужды играть в серию Fallout, так как так как он уже работает на «постапокалиптическом» ПК. Доля истины в этом есть — монитор с оранжевыми символами определенно добавляет антуража.


Мы в 1cloud.ru предлагаем услугу «Облачное хранилище». Оно подойдёт для хранения бэкапов и архивов, а также обмена корпоративными документами.

Система хранения данных построена на дисках трех типов: HDD SATA, HDD SAS и SSD SAS суммарным объемом в несколько тысяч Тбайт.

Все оборудование стоит в дата-центрах DataSpace (Москва), Xelent/SDN (Санкт-Петербург) и Ahost (Алма-Ата).


Что еще есть в нашем блоге на Хабре:

Let's block ads! (Why?)

Бьорк и Microsoft создали музыкальный проект, в котором ИИ изменяет мелодию в зависимости от всего вокруг

Исландская певица Бьорк вместе с компанией Microsoft создала необычный музыкальный проект под названием Kórsafn (хоровые архивы). Искусственный интеллект от Microsoft воспроизводит в непрерывном режиме в холле одного из отелей (Sister City) в Нью-Йорке отрывки из разных хоровых аранжировок произведений Бьорк за семнадцать лет. Получаемая в итоге музыкальная композиция все время меняется — ИИ постоянно корректирует подбор аранжировок в зависимости от данных с видеокамер, расположенных на крыше отеля.
ИИ проекта Kórsafn получает подробные детальные изображения внешнего мира над отелем в реальном времени. Его алгоритм обучен распознавать различные типы облаков и их плотность, наличие в кадре птиц, прохождение самолетов, разные атмосферные явления, восход и закат солнца. ИИ реагирует на каждое зарегистрированное им изменение картинки и подбирает под него соответствующую мелодию.

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

Это уже второй проект от компании Microsoft и отеля Sister City, основанный на концепции искусственной генерации звукового ландшафта. Первый был реализован рядом с отелем в апреле 2019 года. Тогда более простой алгоритм ИИ воспроизводил отрывки произведений Джулианны Барвик.

Let's block ads! (Why?)

Капитализация 5 крупнейших технологических компаний США превысила $5 трлн

Изображение: Unsplash

На днях Alphabet стала четвертой по счету американской технологической компанией, чья капитализация перевалила за отметку в $1 трлн. Материнский холдинг Google попал в компанию к Apple, Microsoft и Amazon (сейчас стоит меньше триллиона).

На долю пяти наиболее дорогих технологических компаний США (к списку добавляется Facebook) сейчас приходится 17% в индексе S&P 500 – в 2015 году эта величина не превышала 11%. Всего же совокупная капитализация Apple, Amazon, Alphabet, Microsoft и Facebook сегодня превышает $5,2 трлн.

За пять лет пятерка технологических гигантов подорожала с $3,5 млрд. И это нравится далеко не всем. В США все активнее звучат голоса тех, кто считает, что крупные технологические компании используют практики недобросовестной конкуренции. Об этом в частности говорят кандидаты в президенты США Элизабет Уоррен и Берни Сандерс.

Применительно к Alphabet звучат обвинения в том, что холдинг стремится к упрочению своего положения на рынке онлайн-рекламы и использует для снижения конкуренции мобильную ОС Android. Google неоднократно получала штрафы, а совсем недавно иск с обвинением в копировании запатентованной технологии предъявила компания-разработчик умной колонки Sonos.

Все это не помешало росту капитализации Alphabet. На сегодня акции компании выросли более чем на 30% по отношению к прошлому году. В свою очередь, цена акций Apple выросла более чем на 100% за год, а ценные бумаги Microsoft и Facebook подорожали более чем на 50% в случае каждой компании.

Купить акции различных американских компаний из России можно без необходимости открывать отдельный брокерский счет у зарубежных брокеров. С помощью рынка иностранных ценных бумаг Санкт-Петербургской биржи инвесторы могут покупать 500 ликвидных акций ведущих компаний всех секторов мировой экономики, в том числе все акции индекса S&P 500.

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

Полезные ссылки по теме инвестиций и биржевой торговли:


Читайте обзоры, аналитику рынков и инвестидеи в Telegram-канале ITI Capital

Let's block ads! (Why?)

[Перевод] Знаменитые уравнения жидкости дали течь

Исследователи столетиями искали примеры ситуаций, в которых уравнения Эйлера для гидродинамики идеальной жидкости окажутся неверными. И вот, наконец, такой пример нашли математики.



При сближении колец жидкости в определённых упрощённых случаях описывающие их движения уравнения Эйлера не работают

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

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

$ \frac{\partial v}{\partial t} + (v \cdot \nabla) v = g – \frac{1}{\rho} \nabla p $

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

«Полтора года назад я бы сказал, что не рассчитываю увидеть подобного развития событий ещё при своей жизни», — сказал Тарек Элгинди, математик из Калифорнийского университета в Сан-Диего, автор новой работы.

Элгинди доказал существование недостатков в уравнениях Эйлера в двух работах, опубликованных в 2019-м году – апрельскую он написал сам, а октябрьскую – в соавторстве с Теджеддином Гоулом и Надером Масмуди. Работы перевернули столетние предположения по поводу этих знаменитых уравнений для жидкости.

«Мне кажется, это прекрасное и замечательное достижение», — сказал Питер Константин, математик из Принстонского университета.

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

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

«В целом, мне кажется, что люди удивлены примером, приведённым Тареком», — сказал Влад Викол, математик из Нью-Йоркского университета.

Как уравнения Эйлера рванули


Леонард Эйлер обнаружил уравнения для жидкости, носящие ныне его имя, в 1757 году. Они описывают эволюцию жидкости со временем, так же, как уравнения Ньютона описывают движение бильярдного шара по столу.

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

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


Тарек Элгинди

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

«Эту модель можно представить себе как идеализированный мир, а уравнения – как правила движения этого мира», — писал Владимир Сверак из Миннесотского университета нам в емейле.

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

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

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

«В основе своей вопрос прост: всегда ли эти уравнения выполняют свою работу?» – сказал Сверак.

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

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

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

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

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

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

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

Уменьшая сложность


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

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

«Приходится слишком много всего отслеживать», — сказал Элгинди.

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


1) Жидкости двигаются навстречу. Поля скорости отслеживают движение небольших участков жидкости.
2) Центры колец притягиваются, что заставляет кольца вытягиваться.
3) Кольца сталкиваются, порождая точку «сингулярности», вращающуюся с бесконечной скоростью.

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

«Это сводит задачу к двумерной», — сказал Элгинди.

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

В реальной жизни, если перейти от одной точки к другой, расположенной очень близко к ней, то и скорости этих двух точек будут почти равны. Завихрённости двух этих точек тоже должны быть очень похожими. Математики говорят, что поля скорости с таким свойством «гладкие», то есть, значения на них меняются постепенно – или гладко – при движении от одной точки к другой. Быстрых изменений не происходит.

Но в случае с описанием жидкости от Элгинди всё по-другому.

«Завихрённость в данных Тарека может меняться очень сильно, — сказал Викол. – У близких точек может быть очень разная завихрённость».

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

Игра окончена


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

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

Теперь представьте, как два противоположных кольца сближаются.

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

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

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

«Классическая форма уравнения ломается, — сказал Элгинди. – После этого непонятно, что происходит».

У результата есть свои ограничения. А именно, невозможно экстраполировать поведение уравнений Эйлера в полностью «гладких» условиях на основе этого результата. Математики ещё несколько десятилетий назад доказали, что при «гладких» условиях сценарий, рассматриваемый Элгинди, не выдаст сингулярности.

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

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

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

Многие поколения учёных искали слабое место в уравнениях Эйлера. И наконец – с некоторыми оговорками – математик нашёл его.

Let's block ads! (Why?)

[Перевод] Конференция DEFCON 27. Взламываем полицию. Часть 1

Брифинг выступления:

Билл Сверинджен (hevnsnt) уже несколько десятилетий является членом хакерского сообщества, что довольно странно, поскольку его профиль в Twitter указывает, что ему всего 23 года. По словам Билла, всю свою жизнь он посвятил пониманию того, как устроены вещи, и направил накопленные знания на то, чтобы пользоваться техническими преимуществами нашего мира любым возможным способом. Его интересы всегда были сосредоточены на взломе «железа», поэтому Билл любит разрабатывать простые для повторения проекты с использованием широко распространенных недорогих вычислительных платформ, таких как Arduino и RaspberryPi.

Официально Билл, обладая более чем 15-летним практическим опытом в области информационной безопасности, разрабатывает стратегии защиты критически важной деловой инфраструктуры от современных киберугроз. Кибербезопасность — его страсть, и Билл владеет большим опытом создания, развития и управления командами корпоративного класса, которые служат для обеспечения реагирования на инциденты, работают в цифровой криминалистике, в оценке уязвимостей, тестировании на проникновение и обеспечивают соблюдение политики безопасности в крупных корпорациях (Fortune 150).

Билл Сверинджен занимает пост старшего директора отдела киберзащиты компании CenturyLink (Монро, Луизиана), третьей по величине телекоммуникационной компании в США и признанного лидера на рынке интернет-услуг, облачной инфраструктуры и ИТ-решений для корпоративных клиентов и правительства США.

Ведущий: наш следующий спикер — Билл Сверинджен, хакер из Канзас-Сити. Билл выступает на DefCon уже долгое время и является настоящим ветераном отеля Alexis Park здесь, в Вегасе.

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

Если вы живете в крупном метрополисе и пользуетесь хакерским пространством или хотя бы раз в него входили, знайте, это пространство и есть часть этого самого парня, который несколько лет назад помог основать Компьютерный Конгресс Cowtown в Канзас-Сити. Что еще? Если вы хотя бы раз соприкасались с SECKC, ульем канзасских хакеров Kansas City's Hacker Hive, который служит платформой для проведения крупнейшей в мире ежемесячной конференции InfoSec Meetup – это тоже тот самый парень. Так что Билл, пожалуй, имеет самую большую аудиторию, какая только может быть у человека. Если вы уже успели напиться или сидите здесь с похмелья после выпивки, которую оплатил кто-то другой – знайте, что Билл и есть тот самый парень, который заплатил за вашу выпивку. Пожалуй, Билл – лучшая часть вечеринок DefCon.

Итак, это первое выступление Билла на DefCon, у него просто потрясающий доклад, с которым я уже ознакомился, так что добро пожаловать, Билл!

Билл Сверинджен (2:06): привет! Спасибо за такое замечательное представление, ты действительно упомянул некоторые вещи, о которых я собираюсь рассказать. Это мой 15-й ежегодный DefCon, и я решил, что наслушался достаточно, так что теперь пришло время вернуть свой долг. Итак, кто готов взламывать копов? Отлично! Я собираюсь рассказать вам о том, что считается незаконным во всех 50 штатах, поэтому выступая здесь перед вами, я немного нервничаю.

Действительно, я общаюсь с командой SECKC, это довольно дикие ребята, и некоторые из них сидят здесь в первых рядах, так что я нервничаю еще и из-за того, что они могут сделать. Сегодня утром я представлял, как будет происходить мое выступление, и думал, что наверняка услышу не один раз крики: «Билл, ты отстой!”, но все же ожидаю, что примерно половина присутствующих здесь может считаться моими друзьями. Так что я принимаю это так, как оно есть.

Выкрик из зала: „Билл, ты отстой!”.

Билл Сверинджен: не думаю, что этот парень мне друг! ОК, давайте говорить серьезно. Есть некоторые вещи, использование которых являются федеральным преступлением. Но это не важно, ведь я здесь просто чтобы поговорить о них, изучить и объяснить, как они работают. Я объясню, что такое хорошая идея, а что –плохая идея, за которую даже не стоит браться. Но я все-таки оставляю это на ваше собственное усмотрение. Замечу, что мой рассказ ориентирован в первую очередь на законодательство США, так что когда мы говорим о запрещенных технологиях, людям, приехавшим на DefCon издалека, следует это учитывать. Им стоит изучить свои местные законы и исходить из этого.

Тема моего выступления такова, что я не уверен, не арестуют ли меня прямо во время презентации. Конечно, на всякий случай я проконсультировался со своим адвокатом и все такое, и на всякий случай уже опубликовал слайды в интернете, так что при любом исходе вы сможете ознакомиться с моим докладом по приведенной ссылке. А сейчас давайте еще раз, все вместе скажем: «SEC-KC! SEC-KC!». Отлично!

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

(5:00) Итак, Винсент уже говорил о том, что я бывал здесь раньше. Около 10 лет назад у меня был сайт под названием iHacked и одной из вещей, которую я придумал, было использование мобильного инфракрасного передатчика Y-MIRT, который заранее переключал красный сигнал светофора на зеленый с расстояния до 450 м. Это было потрясающе, действительно круто. Ты можешь ехать по городу на зеленый всю дорогу так быстро, как захочешь. Эта штука привлекла ко мне много внимания, в том числе и в СМИ, у меня брали интервью и т.д. Тогда я думал, что это довольно круто, но с тех пор я вырос. Знаете, это было 10 лет назад, и я кое-чему научился. Во-первых, вам не стоит рассказывать журналистам, о том, как вы нарушаете федеральные законы.

Примечание переводчика: Y-MIRT представляет собой электронное устройство для дистанционного управления световыми элементами светофоров и питается от сети автомобиля напряжением 12В.

Мне просто повезло, что это не закончилось для меня печальным образом, поскольку в своих интервью я раскрывал важные технические детали, например, об использовании таймеров «5-5-5», рассказывал о том, как электроника светофоров взаимодействует с устройствами Y-MIRT и т.д.

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

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

(6:40) Суть в том, что я — хакер. Я всегда был хакером. Я всегда буду хакером. Когда я думаю о том, что это значит для меня, и почему и выбрал этот путь, то понимаю, что все это произошло благодаря моему отцу. Мой отец был инженером и проводил со мной много времени, когда я рос и задавал вопросы. Он объяснял мне, чтобы я понял, как все работает в нашем мире. Я просто спрашивал, как это действует, и он объяснял. Так что впоследствии, став взрослым, я проводил свою жизнь очень интересно, пытаясь понять, как и почему все работает, и что мне нужно сделать, чтобы эти технические устройства могли улучшить мою жизнь.

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

Да, я хакер, и мое преступление — это любознательность. Я сужу о людях не по тому, как они выглядят, а по тому, что они делают и что они знают. Я думаю, что для хакеров взлом – это правильная этика, и надеюсь что наше сообщество достаточно сильно в этом смысле.
Итак, если в этой аудитории присутствуют представители местных или федеральных правоохранительных органов, пожалуйста, поднимите руки. Я понимаю, что этих людей может здесь не быть, но у меня есть на это причина. Дело в том, что я буду привлекать аудиторию к некоторому участию в хакерской презентации, и если вы не хотите быть выбранным, поднимите руки. Итак, я вижу несколько поднятых рук, а как насчет тех, кто работает под прикрытием? Ага, один есть (смех в аудитории). Не могу поверить, что это сработало, но я только что раскрыл федерального агента!

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

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

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

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

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

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

(12:00) Из формулы видно, что они измеряют отношение значения измененной частоты отраженного сигнала Δf к значению частоты излучаемого сигнала f, которое равно двум скоростям цели 2Vtarget, поделенным на скорость света С – ее величина постоянна во времени. Итак, по изменению частоты радар вычисляет разность скоростей между самим радаром и объектом, таким образом определяя скорость автомобиля. Если сам полицейский автомобиль движется, то в расчетах его скорость учитывается благодаря сигналу, отраженному от дорожного покрытия. Теперь, когда я показал вам математику, мы все можем пойти домой, потому что все понимают, что мы собираемся делать, правильно?

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

Одно из действительно приятных свойств радара — это то, что офицер может просто установить его и забыть. Посмотрите на это видео. Коп просто сидит там и сканирует радаром проезжающие мимо машины, ему не нужно ничего делать. Второе полезное свойство радара состоит в том, что полицейский может измерять вашу скорость на ходу. И что самое интересное, так это то, как работают эти радиоприемники. Они передают эту частоту и получают ответные сигналы от нескольких источников. Радар может определить свою текущую скорость по отражениям, которые возвращаются от стационарных объектов – деревьев, дорожных знаков, зданий, дороги, а затем, основываясь на этом, вычислить скорость движущихся объектов. Некоторые более продвинутые полицейские радары могут отслеживать несколько целей и даже показывать полосы движения, по которым они движутся. Я думаю, что это действительно круто и что очень важно и интересно то, как работает эта технология. Анимация, показанная на этом слайде, тоже очень важна для понимания технологии, так на самом деле обратно в полицейский радар поступает лишь небольшая часть отраженных сигналов. Остальная часть радиоволн устремляется дальше, может отражаться от деревьев, рассеиваться и так далее. Вот что я хочу показать этим слайдом.

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

Радары Х-диапазона работают на частоте от 8 до 12 ГГц, в США наиболее распространена частота 10,5 ГГц. Это самая старая система, которая мало используется в наше время. Радар К-диапазона с частотой от 18 до 26,5 ГГц является наиболее распространенным в США, и если провести опрос, выясниться, что по умолчанию этой системой оснащены все патрульные полицейские машины. Такие системы используются во всем мире.

Радар КА является новой многорежимной версией радара К. Есть еще радары типа KU с частотой 12-18 ГГц, которые не используются в США и в основном распространены в европейских странах.

(16:25) ОК, кто-нибудь понял хотя бы в общем, как работает радар? Кто-нибудь помнит, что он измеряет? Хорошо, я просто хотел убедиться, что мой посыл до вас дошел и наступило время «живой» демонстрации. Чего нам не стоит делать на DefCon, так это показывать «живые» демо-записи, мы же пытаемся сделать что-то полезное, не так ли? Поэтому мне нужен доброволец из числа здесь присутствующих. Пожалуйста, поднимитесь ко мне на сцену!

(17:15) О, мой Бог! Настоящий полицейский! Это представитель другой половины DefCon. Итак, я собираюсь дать присутствующему здесь полицейскому ручной радар. Далее я собираюсь идти к нему и при этом вернуть ту же частоту, которую он направляет на меня так, что радар покажет, будто бы я не двигался, а стоял на месте. Затем я немного подрегулирую посылаемую частоту так, что радар покажет, будто бы я двигаюсь, хотя я буду неподвижен.

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

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

(18:15) Итак, у нас имеются две версии радара. Один – это типичный полицейский ручной радар, а другой — Hot Wheels, который я выбрал, потому что его легко было модифицировать для моих нужд. Если здесь присутствуют люди из Федеральной комиссии по связи FCC, сообщаю, что с этим устройством все нормально, я держался в рамках закона.

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

(19:00) — Билл направляет свой «радар» на полицейского и быстро к нему идет. Полицейский смотрит на табло своего радара – скорость Билла не отображается. Билл говорит под аплодисменты аудитории: «Вижу, что вы мне поверили!».

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

(19:26) — Билл подходит вплотную к полицейскому и направляет свой модифицированный радар в сторону полицейского радара, а затем быстро возвращается на трибуну. Полицейский показывает аудитории табло своего радара, на котором отображается замеренная скорость.

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

(20:10) Отлично, теперь давайте посмотрим, можно ли проделать то же самое с радаром полицейской машины. Мы могли бы собрать устройство, которое всегда показывает, что вы двигаетесь со скоростью 65 миль в час. Если мы знаем скорость автомобиля, с которой хотим передвигаться, нужно просто решить уравнение для двух других переменных, верно? Мы подставляем частоту излучения, направленного в нашу сторону, и получаем частоту, которую должно излучать наше устройство, чтобы полицейский радар показал нужную нам скорость. На слайде вы видите результаты этих вычислений: если мне нужно обмануть радар X-типа, я передаю сигнал с частотой 10,50000203125 ГГц. Мне не нужно никакого шифрования, передачи пакетов и тому подобного, достаточно просто передавать микроволновый сигнал частотой 10,5 гигагерц. Если я собираюсь проделать то же самое с самым популярным в мире радаром типа К, мне нужно передавать сигнал частотой 24,12 ГГц. И когда его примет полицейский радар, тот покажет скорость движения 65 миль в час.

С радаром типа КА дело обстоит немного по-другому, потому что это многодиапазонный трансмиттер, но поверьте, его тоже можно легко обмануть, направив в его сторону сигнал с частотой 33,8 ГГц.

Помните историю про моего отца? Пока я занимался этими вычислениями, я вспомнил его рассказ о микроволновой печи. Так вот, если бы я использовал излучение микроволновой печи частотой 2,4 ГГц против полицейского радара X-типа, в тот день копы увидели бы, что я еду по шоссе со скоростью минус 97 миллионов миль в час.

22:00

Ссылка на вторую часть будет скоро здесь


Немного рекламы :)


Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас, оформив заказ или порекомендовав знакомым, облачные VPS для разработчиков от $4.99, уникальный аналог entry-level серверов, который был придуман нами для Вас:Вся правда о VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps от $19 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).

Dell R730xd в 2 раза дешевле в дата-центре Equinix Tier IV в Амстердаме? Только у нас 2 х Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 ТВ от $199 в Нидерландах! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — от $99! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?

Let's block ads! (Why?)

Boeing во время аудита обнаружила ошибки в обновленном ПО для самолетов модели 737 MAX

Boeing 737 MAX, источник фото: AP Photo/Ted S. Warren.

Специалисты американской корпорации Boeing обнаружили новые ошибки во время проведения аудита обновленной версии программного обеспечения бортовых компьютеров для самолетов модели 737 MAX. Об этом событии сообщили издания и ABCnews и Reuters. На исправление ошибок в ПО и дальнейшие проверки может потребоваться несколько недель. Из-за этого возвращение Boeing 737 MAX к полетам могут отложить до лета 2020 года.
По словам представителя Boeing, во время технической проверки работы обновленного ПО Boeing 737 MAX было зафиксировано, что системы двух бортовых компьютеров самолета некорректно взаимодействуют друг с другом. Например, они должны были во время общего запуска систем самолета передавать между собой данные, включая параметры мониторинга. В этой начальной процедуре их работы были обнаружены ошибки. В первой версии ПО бортовые компьютеры 737 MAX работали по очереди, одну из систем пилоты активировали перед каждым полетом, а вторую отключали. Согласно спецификации обновленного ПО, теперь оба бортовых компьютера теперь должны работать одновременно, чтобы в случае проблемной ситуации была возможность переключиться на резервную систему.

Boeing проинформировала представителей Федерального авиационного управления США о возникших проблемах и необходимости дополнительного исправления ПО самолета 737 MAX.

«Мы проводим необходимые обновления и работаем с Федеральным управлением гражданской авиации США над оформлением этих изменений, мы также информируем наших клиентов и поставщиков», — говорится в заявлении компании, опубликованном изданием CNBC.

13 марта 2019 года компания Boeing приостановила полеты самолетов Boeing 737 MAX из-за двух авиакатастроф. Причиной аварий была стали ошибки в программном обеспечении системы управления полетом самолета.

В июне 2019 года инженеры Boeing рассказали, что разработка ПО для Boeing 737 MAX была осложнена из-за делегирования части работы низкооплачиваемым контракторам.

23 декабря 2019 года генеральный директор Boeing Деннис Мюленбург ушел в отставку из-за скандала вокруг 737 MAX.

В начале 2020 года Boeing приостановила производство новых самолетов модели 737 MAX.

9 января 2020 года Boeing передал Федеральному управлению гражданской авиации США внутренние документы компании о разработке самолетов серии 737 MAX. В этом комплекте документов содержалась обширная переписка сотрудников, резко критикующих как проект, так и производителя, и регуляторов. В одном из переданных документов было сообщение сотрудника компании, который написал о Boeing 737 MAX: «Этот самолет спроектировали клоуны, которыми руководят обезьяны».

13 января 2020 года новым генеральным директором и президентом Boeing стал Дэвид Калхун, бывший генеральный директор компании Nielsen и GE Infrastructure. Одна из его первоначальных задач на этой должности — восстановление репутации компании, пострадавшей из-за проблем с самолетом 737 MAX.

Let's block ads! (Why?)

Неблагодарный opensource: разработчик самого быстрого веб сервера по версии techempower удалил его репозиторий

Краткая суть ситуации: хабровчанин fafhrd91 на протяжении 3 лет практически самостоятельно писал actix-webодин из популярнейших крейтов в инфраструктуре раста (см. кдвп), лидер в большинстве различных бенчмарков, и за это время подвергался как минимум трём волнам гонений за "неправильное использование раста". После последнего раза автор психанул, и перенес репозиторий к себе в аккаунт с пометкой "Планирую скрыть репозиторий". Конечно, куча людей сразу наделало зеркал и бекапов, но на мой взгляд это не сильно исправляет ситуацию.

На месте репозитория автор оставил единственный postmortem, который я ниже и цитирую целиком:


Another day, another "unsafe shitstorm”, I guess I get used to it.

It is interesting how easy to move comment out of context and how hard to comment with very clear intention (especially if you are not native speaker) What was the patch? It was very strait forward, simple, uncreative change, intention was just to remove unsafe not to fix existing code. I believe software development is one of the most creative work we do, and creativity is part of why we love software development, why it is fun. Especially if you combine it with real world projects constraints. “creative constrains” could be source of very interesting solutions. Being on the edge of your abilities is super fun. So uncreative change felt boring (oh! And author gave up copyright claims for that patch (a bit irony and sarcasm)). I’ve never used unsafe unintentionally, I use it because I believe usage is safe. There was no any malicious intentions. I believed it held mutable aliasing invariant and I was very happy that someone found real problem. I wanted to solve the problem, just with a bit of creativity. And use RefCell solution only if it would be not possible to solve it with any other way. Btw, I like the solution I found, it is in master and solves the problem at least one from the issue. If you want to push boundaries you have to touch this boundaries and sometimes you push too hard.

Be a maintainer of large open source project is not a fun task. You alway face with rude and hate, everyone knows better how to build software, nobody wants to do home work and read docs and think a bit and very few provide any help. Seems everyone believes there is large team behind actix with unlimited time and budget. (Btw thanks to everyone who provided prs and other help!) For example, async/await took three weeks 12 hours/day work stint, quite exhausting, and what happened after release, I started to receive complaints that docs are not updated and i have to go fix my shit. Encouraging. You could notice after each unsafe shitstorm, i started to spend less and less time with the community. You felt betrayed after you put so much effort and then to hear all this shit comments, even if you understand that that is usual internet behavior. Anyway, removing issue was a stupid idea. But I was pissed off with last two personal comments, especially while sitting and thinking how to solve the problem. I am sorry for doing that.

It’s been three years since I started actix project (time flies). I learnt a lot, i meet new people, I found language that I really like and want to use it fulltime, I found fun job. But damage to the project's reputation is done and I don’t think it is possible to recover. Actix always will be “shit full of UB” and “benchmark cheater”. (Btw, with tfb benchmark I just wanted to push rust to the limits, I wanted it to be on the top, I didn’t want to push other rust frameworks down.) Everything started with actix, then actix-web and then actix-net. It took a lot of time to design api and architecture. Each of this projects was rewritten from scratch at least 4-5 time. I hope I expanded some boundaries and found few new patterns, I hope other developers will check source code and find inspiration to move even further. Nowadays supporting actix project is not fun, and be part of rust community is not fun as well.

I am done with open source.

P.S. I moved actix-net and actix-web project to my personal github account. I will make decision during next couple days what to do. I don’t want to see the project becomes ghost of what it was. Maintainers must understand how everything work, but don’t anyone who does and those who could are busy with other projects. At the moment I am planing to make repos private and then delete them (will remove benchmarks as well), unless others suggest better ideas.

Everything has to come to the end. It was fun trip but now is time to move on. Life should be fun.

Как это выглядит с моей стороны: очередной безопасник (член команды RustSec) создал issue "ваш код содержит UB", автор попросил привести пример который триггерит его, безопасник такой код предоставил, после чего автор исправил использование публичным апи приватного так, чтобы UB не возникало. На вопрос "почему бы не убрать unsafe" автор ответил, что это может иметь последствия для производительности, поэтому сейчас он просто фиксит симптом, чтобы подумать, как это исправить без просадки производительности (напомню, что по рейтингам benchmark games actix-web является самым быстрым), или неудобного апи (оно у актикса на удивление хорошо). После чего на него обрушился вал обвинений в том, что он неправильно пользуется языком, и вообще, не должен никогда на нем писать.

Итог — удаление проекта, окончательное выгорание автора и нежелание иметь дело с неблагодарным opensource впредь:

В поддержку автора написали авторы кортимы (Клабник, Лодочник).

Для меня ситуация очень неприятная. У нас на проекте используется актикс-веб из-за сочетания уникального сочетания скорости, удобства и всё-таки надежности. А теперь основной ментейнер покинул проект, и если за 3 года не нашлось никого кто написал бы больше 3000 строк кода, то откуда такой человек найдется сейчас?..

Upd. Сохраненная переписка (оригинальный issue был удален автором репозитория): https://gist.github.com/pcr910303/d7722a26499d0e9d2f9034a06f2433b4

Let's block ads! (Why?)

Первые в мире VR-очки с поддержкой HDR: что известно о прототипе от Panasonic

Наследники Коносуке Мацуситы удивили посетителей CES 2020 первыми в мире VR-очками c поддержкой HDR. Представленное устройство оказалось прототипом, при этом вызвало живой интерес посетителей и экспертов. Несмотря на то, что о сроках выхода серийных очков в данный момент нет информации, есть предположение, что оно сможет стать конкурентом бестселлерам от SONY и VR-шлему HTC Vibe Pro, который был признан лучшим в мире серийным устройством такого типа. Под катом о том, что известно о выставочных образцах перспективного девайса.


Известно и реализовано

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

Характеристики и участие сторонних компаний
Заявлено Ultra HD-разрешение, что соответствует тому, что есть у HTC Vibe Pro. Оснащены микро OLED дисплеями, поддерживающими расширенный динамический диапазон (HDR). Напомню, что технология HDR обеспечивает диапазон яркости, превышающий возможности прочих, существующих на данный момент технологий.

Так, динамический “потолок” стандарта sRGB составляет около 3000:1, в то время как HDR позволяет довести диапазон яркости до значений близких к 1 000 000:1.

Известно также, что микропанели OLED для очков являются совместным продуктом, созданным Panasonic и корпорацией Kopin. Также заявляется, что в создании оптического модуля приняла участия компания 3M. Детальных технических данных не предоставляется.

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

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

Что рассказывают в Panasonic и о чем молчат?


Представители Panasonic и их корпоративная пресса утверждают, что помимо HDR, UHD-разрешения и, на субъективный взгляд, очень привлекательный дизайн, ставка сделана на низкую массу и формфактор очков. По их мнению — это то, что ждет рынок, который устал от громоздких шлемов.

Также в Panasonic утверждают, что им таки удалось победить “эффект решетки” — когда заметны тонкие линии между пикселями и теряется реализм. На этом также делается особый акцент. При этом не понятно, смогут ли очки обеспечить поддержку частоты 96 fps, которая не менее чем HDR полезна для создания реалистичного изображения.

С другой стороны, корпорация делает ставку на развитие сетей 5G, спортивные интернет-трансляции и т.п. Есть предположение, что серийные продукты попадут на внутренний японский рынок ещё до начала олимпиады в Токио. О стоимости и дате выпуска Panasonic также молчит, как офицер Квантунской армии на допросе. Никаких намёков, инсайдов и сливов…

Итог


Устройство даже на стадии прототипа получает заслуженное внимание. Безусловно, реализация 96 fps позволит эффективно применять его для игр, создавая более реалистичную картинку. Доступные в сети отзывы с CES-2020 многообещающие и не похожи на купленные. Остаётся риск, что устройство убьёт цена, но в Panasonic, на сколько я знаю, сторонники массовых и сравнительно бюджетных продуктов, поэтому вполне возможно, очки не будут стоить безумных денег. На мой взгляд, ставка на форм-фактор и заявленные характеристики более чем оправданы. Предлагаю всем ванговать в опросе на предмет взлетит или нет.

Использован фото контент:
itsotnya.xyz/panasonic-predstavila-prototip-sobstvennyx-vr-ochkov-s-neobychnym-dizajnom
panasonic.ru/press_center/news/detail/472320
composter.com.ua/content/vr-ochki-s-hdr-ot-panasonic

Let's block ads! (Why?)

пятница, 17 января 2020 г.

[Перевод] Процессор NXP S32G для современной архитектуры автомобильной электроники

image

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

S32G – последний член семейства S32 от NXP, которое было создано в 2017 году. Как и все остальные процессоры данного семейства, он основан на процессорных ядрах ARM Cortex. Три пары маломощных ядер Cortex-M7 и четыре высокопроизводительных Cortex M-53 выполняют основные задачи обработки. Ядра также дополняются специальными сетевыми ускорителями, ядрами цифровой обработки сигналов и шифрования.

Сетевые ускорители поддерживают как традиционные автомобильные сетевые протоколы (такие как CAN, LIN, и Flexray), так и гигабитный Ethernet. В случае с автоматизированными транспортными средствами, производящими до 4 Гб необработанных данных в час, пересылка данных в автомобиле имеет очень большое значение. Ускорители справляются с большей частью этой рабочей нагрузки, оставляя ядра ARM более свободными для других задач.

image

Одна из задач, которую может решать S32G – предварительная обработка данных. Большая часть данных, которые производит автономный автомобиль, используется только в режиме реального времени для управления и эти данные не нужно передавать в облако или обмениваться ими с другими автомобилями. Однако в стоге сена этих данных есть и иголки, которые могут быть полезны для широкого спектра сервисов, вроде передачи информации о местоположении выбоин или данных о погоде.
«Я говорил не только о пересылке и переходе от необработанных данных к информации, но и о сокращении объема этих данных, которое позволит экономить трафик в сетях 4G и 5G, что действительно важно.», – сказал Брайан Карлсон, директор управления продуктовой линии отдела сетевых процессоров для автомобилей в NXP. «Уровень функциональной безопасности повышается, так как мы повышаем и уровень автономности, используя стандарт ASIL-D. Обычно шлюз работает по стандарту ASIL-B, но мы видим повышенный интерес в использовании ASIL-D, и при использовании продвинутых систем помощи водителю вам определенно нужен стандарт ASIL-D, который отлично подходит для таких приложений»

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

Несмотря на то, что S32G был разработан для управления пропускной способностью данных в электронных архитектурах автомобилей нового поколения (вроде Aptiv’s Smart Vehicle Architecture (SVA), цифровой автомобильной платформы GM или новой электронной платформы для автомобилей Ford), он также может выполнять целый ряд других задач. Традиционные электронные архитектуры постепенно развивались с 1970-ых.

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

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

Платформы, подобные SVA, построены вокруг этой концепции и S32G потенциально отлично подходит для таких вариантов использования. Благодаря наличию нескольких ядер, он имеет возможность обеспечить запас рабочей силы, который может обеспечить обнаружение ошибок. Возможности ввода-вывода и сетевые характеристики нового чипа идеально подходят для получения данных с камер, радаров, ультразвуковых датчиков и лидаров. Ядра ARM могут обрабатывать и объединять эти данные для помощи водителю.

Сетевое ускорение – один из ключевых аспектов S32G. Без него на обработку гигабитных подключений уходило бы около 90% вычислительной мощности ядер ARM. При включенном ускорителе загрузка снижается до 0.2%, а ядра процессора остаются свободными для других задач.

Вряд ли S32G будет иметь такую производительность, которая позволит ему напрямую конкурировать с такими чипами как недавно анонсированный Nvidia Orin, но потенциально он может стать альтернативой чему-то вроде Xavier или MobileQ EyeQ5 в частично или полностью автономных системах вождения (L2 и L3). Также он может контролировать электрические двигатели и системы управления батареями.

Три пары Cortex-M7 работают в двухканальном режиме. Каждое ядро в паре выполняет один и тот же код, предоставляя возможность обнаруживать любые аномалии работы в рамках этой пары, в то время как любая пара может выполнять различные задачи. Четыре ядра Cortex-A53 опционально могут работать в двухканальном режиме, в котором каждая пара будет выполнять задачи на двух ядрах одновременно. Использование этого режима зависит от характера использования S32G, и если такая избыточность не требуется, то четыре A53 могут работать независимо друг от друга.

В общей сложности S32G имеет 20 интерфейсов CAN, 4 гигабитных Ethernet-интерфейса, 2 интерфейса PCI-express третьего поколения, которые обеспечивают гибкость для широкого спектра вариантов использования. NXP не рекламирует конкретные максимальные возможности работы как некоторые конкуренты ввиду широкого спектра применений и конфигураций. Тем не менее, он потребляет менее половины мощности предыдущих чиповых решений NXP, что, несомненно, оценят автомобильные инженеры.



image
О компании ИТЭЛМА
Мы большая компания-разработчик automotive компонентов. В компании трудится около 2500 сотрудников, в том числе 650 инженеров.

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

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


Читать еще полезные статьи:

Let's block ads! (Why?)

[Перевод] Семь самых захватывающих космических миссий предстоящего года

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

1. Четыре миссии к Марсу

Когда: июль

Это поистине беспрецедентное время для исследования Марса. Целых четыре (четыре!) разных миссии отправляют новые космические корабли к красной планете. Все запуски запланированы на июль. Самый большой — это марсоход NASA, оборудованный множеством высокотехнологичных инструментов, которые помогут понять, была ли там когда-то внеземная жизнь (или может существует до сих пор). Запланирован даже запуск беспилотного вертолета! У Китая — свой марсоход «Huoxing-1», который будет изучать поверхность и атмосферу Марса в течение 90 дней. Европейское космическое агентство и Роскосмос объединяются для запуска «Rosalind Franklin» — марсохода, названого в честь химика, участвовавшей в передовых исследованиях структуры ДНК. Он так же займется поисками признаков жизни. И наконец, ОАЭ планирует послать на орбиту аппарат «Hope Mars Mission» для изучения химического состава атмосферы.

2. Программа «Commercial Crew»

Когда: первый квартал

Наконец-то американские астронавты отправятся в космос с американской земли, впервые с 2011 года. SpaceX и Boeing находятся на последних этапах тестов и демо-запусков, перед тем как они доставят астронавтов NASA на МКС, на борту космических кораблей «Crew Dragon» и «Starliner». Обе компании рассчитывают произвести запуски в первом квартале года. Но учитывая предысторию программы — лучше пока не опережать события. В любом случае, мы очень близки к тому, что увидим совершенно новые космические аппараты.

3. Миссия «Artemis 1»

Когда: ноябрь

Предыдущее название — «Exploration Mission-1». Эта миссия NASA станет первым запуском с использованием ракеты-носителя «Space Launch System», которая станет самой мощной ракетой в мире, когда будет полностью завершена. Но это случится далеко не в этом году. «Artemis 1» — первая версия «SLS», включающая только нижние ступени, отправит космический зонд NASA «Orion» в беспилотный полет вокруг Луны. Аппарат, который, скорее всего, однажды доставит астронавтов на Луну и даже на Марс, проведет в космосе примерно три недели. Но существует риск, что миссия будет перенесена на 2021-й. Задержки стали уже обычным явлением разработки «SLS».

4. Миссия «Chang'e 5»

Когда: конец года

Да, верно. Китай планирует целых две миссии по исследованию внеземных пространств в этом году. «Chang'e 5», запланированная на конец года — самая смелая лунная миссия Китая на текущий момент. Спускаемый аппарат попытается собрать почти 4,5 фунта (примерно 2 килограмма — прим. перев.) лунной пыли и камней с западного края ближней стороны Луны. Когда сбор образцов будет закончен, часть аппарата произведет взлет для встречи с орбитальным модулем и доставки капсулы обратно на Землю. Если миссия закончится успешно, это будет первый возвращенный с Луны образец со времен советской миссии «Луна-24» 1976 года.

5. Запуски «мега-созвездий»

Когда: в течение год

В этом году мы будем наблюдать влияние массовых спутниковых сетей. Как хорошее, так и плохое. К концу года «Starlink» компании «SpaceX» будет содержать 720 спутников и начнет, по заверениям фирмы, обеспечивать широкополосный доступ уже во второй половине года. Тем временем, конкурирующая «OneWeb» планирует проводить ежемесячные запуски, начиная с января, и иметь к концу года 600 спутников в группировке. Компания планирует начать оказание услуг для клиентов до конца года. Опасения и жалобы от астрономов и экспертов по космическому трафику по поводу этих массивных созвездий, вероятно, будут звучать всё громче.

6. Запуск космического корабля «Starship»

Когда: дата будет объявлена позже

Блестящий многоразовый межпланетный космический корабль компании «SpaceX», представленный миру в сентябре 2019-го, вероятно сможет в один прекрасный день доставить людей на Марс. Но для начала он должен доказать, что способен оторваться от земли. Илон Маск говорит, что надеется осуществить тестовый запуск «Starship» в течение года, а первую попытку вывода на орбиту произвести во втором квартале следующего года. Маск зачастую называет наиболее амбициозные сроки, поэтому стоит запастись терпением. Но разработка идет полным ходом, а «Starship» — точно один из наиболее интересных проектов, за которым стоит следить.

7. Пилотируемый запуск «New Shepard»

Когда: дата будет объявлена позже

Говоря о космических компаниях, было бы упущением не назвать «Blue Origin» Джеффа Безоса. Их флагманская суборбитальная ракета всегда планировалась как система доставки туристов в космос. На текущий момент копания запустила «New Shepard» 12 раз. Шесть из этих запусков использовали одну и ту же ракету. Их последний запуск, доставивший капсулу для экипажа (без самого экипажа) в космос, был спроектирован как максимальное подобие полноценной миссии с пассажирами на борту. Генеральный директор компании Боб Смит заявил, что они планируют послать людей в космос в течение года. В отличие от конкурентов, «Blue Origin» заработал хорошую репутацию в отношении соблюдения сроков. Поэтому, будем наблюдать.

Let's block ads! (Why?)

Юристы SEC из США два дня допрашивали Дурова, в сети появилась стенограмма части допроса

Представители Комиссии по ценным бумагам и биржам США (SEC) провели 7 и 8 января 2020 года допрос Павла Дурова по поводу блокчейн-платформы TON и его команды. Место проведения допроса — Дубаи, где последнее время проживает создатель Telegram. Дурова допрашивали с 11:20 утра до 10 вечера в первый день и с 10 утра до 5 часов вечера во второй день. Все разговоры записывались на видео. Также делалась стенограмма процесса. Именно часть этого документа и оказалась у издания The Bell.
На допросе, кроме Павла Дурова, присутствовали: адвокат подзащитного, юрист фирмы Scadden Александр Дрылевский (Alexander C. Drylewski) и юрист обвинения Джордж Тенрейро (Jorge G. Tenreiro).

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

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

В начале 2018 года Telegram объявил о планах запустить блокчейн-платформу TON, которая должна использовать криптовалюту Gram для осуществления взаиморасчетов ее участников. В январе и марте 2018 года компании Telegram Group и TON Issuer продали 2,9 млрд токенов Gram 171 покупателю, получив $1,7 млрд. Согласно заключенным договорам на финансирование этого проекта, Telegram Group и TON Issuer обязались передать токены Gram инвесторам при условии запуска платформы TON не позже 31 октября 2019 года.

В начале октября 2019 года SEC подала иск и добилась приостановки ICO Telegram. Комиссия заявила о нарушениях во время предложения. Она посчитала, что токены Gram были проданы незаконно, поскольку Gram не зарегистрирован ни в одной юрисдикции, а у инвесторов нет доступа к финансовой истории компании. В ходе разбирательства команда TON предложила отложить выпуск токенов Gram до 30 апреля 2020 года или вернуть 77% вложенных денег.

6 января 2020 года была объявлена официальная позиция Telegram по поводу блокчейна TON: платформа децентрализована и после запуска никто ни за что не отвечает; Telegram никак не связан с TON, в том числе компания не будет встраивать кошелек TON в Telegram-клиента.

17 января 2020 года SEC опубликовала заявление по разбирательству с Telegram, которое было подано в поддержку ходатайства об упрощенном судопроизводстве в суд Южного округа Нью-Йорка. Основные слушания по этому делу назначены на конец февраля 2020 года. Позиция SEC осталась прежней — токены Gram являются незарегистрированной ценной бумагой, так как Gram не зарегистрирован ни в одной юрисдикции, а у инвесторов нет доступа к финансовой истории компании.

Let's block ads! (Why?)

[Перевод] Правила работы с динамическими массивами и пользовательскими классами коллекций

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

Использование массивов в качестве списка


Все элементы должны быть одного типа


Если вы используете массив в качестве списка (коллекция значений, идущих в определённом порядке), то все значения должны быть одного типа:
$goodList = [
    'a',
    'b'
];

$badList = [
    'a',
    1
];

Общепринятый стиль аннотирования типа списка: @var array<TypeOfElеment>. Удостоверьтесь, что вы не добавили тип индекса, он всегда должен быть int.

Нужно игнорировать индекс каждого элемента


PHP автоматически создаст для каждого элемента списка новый индекс (0, 1, 2 и т. д.). Однако вам не следует ни полагаться на эти индексы, ни использовать их напрямую. Клиенты могут полагаться только на свойства iterable and countable.

Так что можете свободно использовать foreach и count(), но не применяйте for для циклической работы с элементами списка:

// Good loop:
foreach ($list as $element) {
}

// Bad loop (exposes the index of each element):
foreach ($list as $index => $element) {
}

// Also bad loop (the index of each element should not be used):
for ($i = 0; $i < count($list); $i++) {
}

В PHP цикл for может вообще не работать, если в списке отсутствуют какие-то индексы, либо если индексов больше количества элементов.

Используйте фильтр вместо удаления элементов


Вы можете захотеть удалить элементы по индексам (unset()), но вместо удаления лучше с помощью array_filter() создать новый список без нежелательных элементов.

Повторюсь, не следует полагаться на индексы элементов. Так что при использовании array_filter() не применяйте параметр flag для отфильтровывания элементов по индексу, или даже по элементу и индексу.

// Good filter:
array_filter(
    $list, 
    function (string $element): bool { 
        return strlen($element) > 2; 
    }
);

// Bad filter (uses the index to filter elements as well)
array_filter(
    $list, 
    function (int $index): bool { 
        return $index > 3;
    },
    ARRAY_FILTER_USE_KEY
);

// Bad filter (uses both the index and the element to filter elements)
array_filter(
    $list, 
    function (string $element, int $index): bool { 
        return $index > 3 || $element === 'Include';
    },
    ARRAY_FILTER_USE_BOTH
);

Использование массивов в качестве ассоциативных массивов


Если ключи релевантны и не являются индексами (0, 1, 2 и т. д.), то свободно используйте ассоциативные массивы (коллекция, из которой можно извлекать значения по их уникальным ключам).

Все ключи должны быть одного типа


Первое правило использования ассоциативных массивов: все ключи должны быть одного типа (чаще всего это string).
$goodMap = [
    'foo' => 'bar',
    'bar' => 'baz'
];

// Bad (uses different types of keys)
$badMap = [
    'foo' => 'bar',
    1 => 'baz'
];

Все значения должны быть одного типа


То же самое относится к значениям: они должны быть одного типа.
$goodMap = [
    'foo' => 'bar',
    'bar' => 'baz'
];

// Bad (uses different types of values)
$badMap = [
    'foo' => 'bar',
    'bar' => 1
];

Общепринятый стиль аннотирования типа: @var array<TypeOfKеy, TypeOfValue>.

Ассоциативные массивы должны оставаться приватными


Списки, благодаря простоте их характеристик, можно безопасно передавать от объекта к объекту. Любой клиент может циклически проходить по элементам или подсчитывать их, даже если список пуст. С map работать труднее, потому что клиенты могут полагаться на ключи, которым не соответствует ни одно значение. Это означает, что ассоциативные массивы обычно должны оставаться приватными по отношению к объектам, которые ими управляют. Вместо того, чтобы позволять клиентам напрямую обращаться ко внутренним мапам, пусть геттеры (и, возможно, сеттеры) извлекают значения. Кидайте исключения, если для запрошенного ключа нет значения. Однако, если вы можете сохранить map и ее значения полностью приватными, сделайте это.
// Exposing a list is fine

/**
 * @return array<User>
 */
public function allUsers(): array
{
    // ...
}

// Exposing a map may be troublesome

/**
 * @return array<string, User>
 */
public function usersById(): array
{ 
    // ...
}

// Instead, offer a method to retrieve a value by its key

/**
 * @throws UserNotFound
 */ 
public function userById(string $id): User
{ 
    // ...
}

Используйте объекты в качестве ассоциативных массивов со значениями нескольких типов


Если вы хотите использовать ассоциативный массив, но при этом хранить в ней значения разных типов, то используйте объекты. Определите класс, добавьте публичные свойства типов, или добавьте конструктор и геттеры. К подобным объектам относятся конфигурационные или командные объекты:
final class SillyRegisterUserCommand
{
    public string $username;
    public string $plainTextPassword;
    public bool $wantsToReceiveSpam;
    public int $answerToIAmNotARobotQuestion;
}

Исключения из правила


Библиотеки и фреймворки иногда требуют использовать массивы динамичнее. Тогда невозможно (и нежелательно) следовать предыдущим правилам. В качестве примеров можно привести массив данных, которые хранятся в таблице БД, и конфигурацию form в Symfony.

Пользовательские классы коллекций


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

Что свидетельствует о том, что вам нужно обернуть массив в пользовательский объект коллекции?

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

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


Если несколько клиентов, работающих с одним массивом, выполняют одну и ту же задачу (например, фильтруют, сопоставляют, уменьшают, подсчитывают), то можно убрать дубли с помощью пользовательского класса коллекции. Перенос дублирующейся логики в метод класса коллекции позволяет любому клиенту выполнять одну и ту же задачу, просто вызывая метод этой коллекции:
$names = [/* ... */];

// Found in several places:
$shortNames = array_filter(
    $names, 
    function (string $element): bool { 
        return strlen($element) < 5; 
    }
);

// Turned into a custom collection class:
use Assert\Assert;

final class Names
{
    /**
     * @var array<string>
     */
    private array $names;

    public function __construct(array $names)
    {
        Assert::that()->allIsString($names);
        $this->names = $names;
    }

    public function shortNames(): self
    {
        return new self(
            array_filter(
                $this->names, 
                function (string $element): bool { 
                    return strlen($element) < 5; 
                }
            )
        );
    }
}

$names = new Names([/* ... */]);
$shortNames = $names->shortNames();

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

Отвязывайте клиентов с помощью пользовательского класса коллекции


Если клиент циклически проходит по какому-то массиву, берёт из выбранных элементов часть данных и что-то ними делает, то этот клиент становится тесно привязан ко всем соответствующим типам: массива, элементов, извлекаемых значений, селекторного метода и т. д. Проблема в том, что из-за такой глубокой привязки вам будет гораздо труднее изменить что-либо, относящееся к этим типам, не сломав при этом клиент. В этом случае вы тоже можете обернуть массив в пользовательский класс коллекции и давать правильный ответ, выполняя внутри необходимые вычисления и ослабив привязку клиента к коллекции.
$lines = [];

$sum = 0;
foreach ($lines as $line) {
    if ($line->isComment()) {
        continue;
    }

    $sum += $line->quantity();
}

// Turned into a custom collection class:

final class Lines
{
    public function totalQuantity(): int
    {
        $sum = 0;

        foreach ($lines as $line) {
            if ($line->isComment()) {
                continue;
            }

            $sum += $line->quantity();
        }

        return $sum;
    }
}

Некоторые правила для пользовательских классов коллекций


Делайте их неизменяемыми


При выполнении таких преобразований не должны быть затронуты имеющиеся ссылки на экземпляр коллекции. Поэтому любой метод, выполняющий это преобразование, должен возвращать новый экземпляр класса, как мы видели в предыдущем примере:
final class Names
{
    /**
     * @var array<string>
     */
    private array $names;

    public function __construct(array $names)
    {
        Assert::that()->allIsString($names);
        $this->names = $names;
    }

    public function shortNames(): self
    {
        return new self(
            /* ... */
        );
    }
}

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

Обеспечивайте лишь то поведение, которое действительно нужно клиентам


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

Для итерирования применяйте IteratorAggregate и ArrayIterator


Если вы работаете с PHP, то вместо реализации всех методов интерфейса Iterator (сохранения внутренних указателей и т. д.), реализуйте только интерфейс IteratorAggregate, и пусть он возвращает экземпляр ArrayIterator на основе внутреннего массива:
final class Names implements IteratorAggregate
{
    /**
     * @var array<string>
     */
    private array $names;

    public function __construct(array $names)
    {
        Assert::that()->allIsString($names);
        $this->names = $names;
    }

    public function getIterator(): Iterator
    {
        return new ArrayIterator($this->names);
    }
}

$names = new Names([/* ... */]);

foreach ($names as $name) {
    // ...
}

Компромисс


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

Let's block ads! (Why?)