...

суббота, 28 августа 2021 г.

Новый открытый VPN-протокол — на что обратить внимание

Большинство VPN-провайдеров для построения сервисов использует стандартные решения вроде OpenVPN и IKEv2. Однако малая их часть выбирает другой путь и разрабатывает собственные протоколы — одним из них стал Lightway. В статье обсуждаем его возможности, достоинства, недостатки и безопасность.

Unsplash / Dayne Topkin
Unsplash / Dayne Topkin

Что «под капотом»

Lightway разработал VPN-провайдер ExpressVPN, который в начале августа передал исходники в open source под лицензией GPLv2. По словам авторов, они хотели сделать легкий и производительный протокол, поэтому использовали язык программирования C и реализовали только необходимые функции безопасности — объем кодовой базы составил примерно две тысячи строк. Lightway совместим с Linux, Windows, macOS, мобильными платформами и маршрутизаторами (Netgear, Linksys).

В основе нового протокола лежит криптографическая библиотека wolfSSL. Она соответствует стандарту компьютерной безопасности FIPS 140-2, который разрабатывает институт NIST в США, и уже нашла применение в «боевых» криптографических задачах. Например, её используют разработчики IoT-систем и производители GPRS-терминалов. Первые шифруют данные в устройствах умного дома, а вторые — реализуют интерфейсы типа machine-to-machine (M2M).

При передаче данных Lightway использует UDP, а для установления защищенного канала связи — DTLS. В то же время протокол может работать поверх TCP и TLS 1.3. Для обмена ключами разработчики использовали механизм Диффи-Хеллмана на эллиптических кривых (ECDH). Обмен происходит каждые 15 минут или при переключении сети. Если по какой-то причине использовать ECDH невозможно, система обращается к классическому протоколу Диффи — Хеллмана (DH).

Lightway не привязывает ключи к внутренним IP-адресам (как это делают некоторые VPN-протоколы), и пользователи получают новый адрес при каждом переподключении — в теории такой подход повышает приватность.

Перспективы и критика

Протокол обладает высокой производительностью, и по оценкам разработчиков, в 2,5 раза быстрее конкурентов — OpenVPN, IKEv2, PPTP и SSTP. Но справедливости ради стоит отметить, что авторы не раскрыли критерии и условия тестирования. В связи с этим к указанному показателю стоит относиться с долей скептицизма.

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

Однако в начале лета код прошел независимый аудит безопасности — его провели специалисты из Cure53, оценившие реализацию NTP-протокола NTPsec и свободный IMAP-сервер Dovecot. Проект получил высокий балл, хотя эксперты обнаружили уязвимости (стр.3), открывающие возможности для DoS [их сразу устранили]. Ряд недостатков связали со сторонними библиотеками и компонентами — например, была уязвимость CVE-2020-3336 в WolfSSL, позволяющая злоумышленникам проводить MITM-атаки [в середине июня разработчики выпустили для неё патч].

Unsplash / Jon Moore
Unsplash / Jon Moore

Ряд ИБ-специалистов среди потенциальных недостатков также выделяет отсутствие обфускации. Так, интернет-провайдер, в сети которого работает Lightway, может понять, что клиент использует VPN-подключение. В любом случае это довольно молодой протокол, поэтому может пройти еще какое-то время, прежде чем недостатки устранят. Разработчики приглашают поучаствовать всех желающих — свои предложения и «пул-реквесты» можно оставлять на GitHub.

Кто еще

К относительно новым VPN-протоколам можно отнести WireGuard. Это — VPN-туннель, разработка которого идет с 2016 года. Он использует алгоритмы ChaCha20 и Poly1305, а его пропускная способность в четыре раза выше, чем у OpenVPN.

В начале прошлого года его даже включили в ядро Linux. Однако авторы отмечают, что WireGuard — экспериментальный протокол и работа с ним несет определенные риски. Например, он сохраняет подключённые IP-адреса на сервере, что отрицательно влияет на приватность. Потенциальным проблемам, связанным с ним, даже была посвящена отдельная большая статья на Хабре.

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


Почитать о протоколах:


И работе интернет-провайдеров:


Adblock test (Why?)

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

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

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

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

С 1 января 2020 года в России была введена электронная трудовая книжка. Это сведения о трудовой деятельности, которые хранятся в ПФР в цифровом виде. Переход к новому формату трудовой книжки добровольный и позволяет сохранить бумажную книжку столько, сколько это необходимо. Исключением стали те граждане, кто впервые вышел работу с 2021 года. У таких работников все сведения о периодах работы изначально будут вестись только в электронном виде без оформления бумажной трудовой книжки. Представитель ПНФ пояснил «Ридус», что уже 7,7 миллиона россиян приняли решение полностью перейти на электронную трудовую книжку.

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

Вы перешли на электронную трудовую книжку?

15.06% Нет, но думал об этом 39

57.92% Нет и не собираюсь переходить 150

24.32% Да 63

3.09% У меня не было бумажной трудовой книжки 8

1.93% Мне сразу оформили электронную трудовую книжку 5

Проголосовали 259 пользователей. Воздержались 48 пользователей.

Adblock test (Why?)

Российские ученые разработали новый метод визуализации сосудов головного мозга

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

Распределение скорости эритроцитов: низкая (синий), средняя (зеленый), высокая (красный) / Сколтех
Распределение скорости эритроцитов: низкая (синий), средняя (зеленый), высокая (красный) / Сколтех

Результаты исследования опубликовали в издании The European Physical Journal Plus.

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

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

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

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

Реконструированная карта кровеносных сетей эмбриона цыпленка / Сколтех
Реконструированная карта кровеносных сетей эмбриона цыпленка / Сколтех

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

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

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

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

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

Adblock test (Why?)

Живи, умри, и снова: погружаемся в мир рогаликов


Что такое roguelike и roguelike-like? Почему проводилась целая конференция, чтобы это определить? Можно ли считать рогаликом реальную жизнь? Что сегодня может предложить один из самых суровых и не прощающих ошибок игровых жанров, и как попасть в правильный dungeon? Давайте разбираться!

При вопросе о том, что такое roguelike, или рогалик, современные игроки обычно называют популярные тайтлы: Darkest Dungeon, Hades, The Binding of Isaac, даже Diablo. И в целом они правы. 

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

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

  • Случайная генерация окружения и предметов.

  • Перманентная смерть. Боль неотделима от игрового процесса.

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

Современные игры, которые берут часть из этих классических механик — это roguelite, облегчённые рогалики, а всё началось гораздо, гораздо раньше.

▍ Путь глубинного эльфа


Игра Rogue, давшая название целому жанру и породившая плеяду игр-последователей, вышла в далёком 1980 году.
Парни в левом нижнем углу приуныли после проигрыша

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

Поэтому суть оригинальных рогаликов — это забег по подземелью. Фэнтезийному, а не тому, о котором вы подумали. Будет ли в нём BDSM, зависит только от вашего скилла. Одинокий игрок спускается в мрачные случайно генерируемые коридоры, где его ждёт… нет, не ван Даркхольм, а магические артефакты и опасные враги. 

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

Графики как таковой вообще не было. Её заменяли комбинации символов, а происходящие игровые события выводились как простой лог. Если повезёт, у символов были разные цвета (жизнь геймеров прошлого вообще была суровой). Поэтому в Rogue присутствовало 26 типов противников — по числу незанятых букв алфавита. Дракон выглядел как D, зомби — Z, монеты — как $. Эти обозначения стали традиционными для жанра, кочуя из игры в игру.

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


Современные мемы с @ и не думают заканчиваться

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

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

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

Краткая инструкция к Rogue

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

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

Коварные сюрпризы вроде съедающих вас сундуков перекочевали в Dark Souls и RPG именно отсюда. Как выразился обозреватель Gearfuse, «Не ты побеждаешь в рогаликах, а они побеждают тебя». Шансы вашего персонажа дойти «до конца» крайне малы. На достижение Win Screen могли потребоваться годы. Суть была в уникальном каждый раз опыте и открытия новых знаний об игре. 

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

Более того, названия рогаликов удачно сокращаются в аббревиатуры и слова, похожие на названия программ: DCSS, ADOM, NetHack

Вот приключение глубинного эльфа
А вот исследование причин, почему падает сервер

▍ Раз рогалик, два рогалик


Первое время почти все игры в жанре, копируя Rogue, были очень-очень похожи. Прорывом стал вышедший в 1994 году ADOM — Ancient Domains Of Mystery, в котором появились неслучайные квесты и сюжет сложнее чем: «спустись до самого низа, а потом вернись обратно». 

Чтобы усилить уникальность игрового опыта, была добавлена система знаков зодиака, рас, особых дней месяца, усиливающих разные статы персонажа. У всех существ в мире есть своё мировоззрение, а умереть вы можете сотнями способов, включая естественную смерть от старости. Игра позволяла получить разные концовки, создавать lawful/neutral/chaotic персонажей по ролевой системе морали. Фанаты в своих отзывах называют ADOM «идеальной игрой, чтобы взять с собой на необитаемый остров». 

Как похорошел ADOM при Томасе Бискупе!

В 2018 вышло переиздание в Steam, для которого даже не поленились нарисовать графику, а создатель игры и один из патриархов жанра Томас Бискуп по-прежнему вносит правки по пожеланиям фанатов. 

Но и после ADOM выходило немало достойных игр. Один из самых классических рогаликов Dungeon Crawl: Stone Soup был выпущен в 2006-м, через 26 лет после зарождения жанра, и до сих пор считается оптимальным для проведения турниров. В этой версии игры, кстати, после смертей игроков остаются их призраки с их характеристиками и экипировкой, чтобы устраивать асинхронное PvP. Поиграть бесплатно можно, например, здесь. Советую попробовать просто ради нового опыта, ведь геймер, познавший старые рогалики, уже не какой-то казуал, а человек культуры.

«Stone soup» в названии означает, что проект с открытым исходным кодом, и каждый может поучаствовать в разработке. Дело в том, что начиная с Rogue, исходный код почти всех рогаликов был доступен каждому — диск с ним высылался по любому адресу взамен на полушуточную просьбу отправить автору почтовую открытку. В конце концов, эти игры делали гики для гиков, и обычно они не хотели ничего прятать — наоборот, вовлекали в придумывание механик как можно больше людей. Открытки отправляли и просто в благодарность разработчику. Томас Бискуп, например, собрал целую коллекцию из разных стран мира, но код ADOM держал закрытым — знал, что айтишники могут подсмотреть секреты и сюрпризы игры, которые нужно открывать самому.

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

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

Утро среди деревьев

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

Братья Тарн и Зак Адамсы разрабатывают свою игру мечты уже 15 лет и не собираются останавливаться — пример вдохновляющей верности своему делу. Игра существует благодаря пожертвованиям поклонников. Авторы называют её «лучшим симулятором мира из когда-либо созданных».

Два простых парня, создавших самую самую сложную игру

«Если посчитать, то на то, чтобы всё закончить, уйдёт где-то от 20 до 90 лет — зависит от того, как усердно я буду работать и насколько мне повезёт. Так что, если смотреть на вещи с практической точки зрения, я не думаю, что когда-нибудь посмотрю на игру и посчитаю, что это можно считать версией 1.0 — потому что мы никогда её не доделаем.» — говорит Зак.

▍ А можно с графикой?


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

Так появились roguelike-like, или roguelite. Да, фанаты каноничных рогаликов настолько суровы, что за отсутствие перманентной смерти считают игру «лайт» — облегчённой.

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

Однако чаще всего в «лёгких» рогаликах вы всё равно не можете заучить уровень, натренироваться его проходить или вырастить неубиваемого персонажа, так же, как и любителям оригинального жанра, вам придётся учиться самому, проявлять скорость реакции и глубоко познавать игру. Так что в приставке lite нет ничего предосудительного. Для этих игр является хорошим тоном загонять вас в угол и издеваться над вами. Roguelite воспринимается как жанр для опытных игроков, которые не боятся вызовов.

Loop Hero очаровательно копирует стиль графики старых игр.

В них появляется база, которую игрок может прокачивать, добавляется несколько персонажей, а кто-то, как разработчики Don`t Starve, добавляет механики выживания. Кстати, Diablo — это тоже roguelite, старательно наследующая от рогаликов генерацию уровней, обилие случайных предметов и идею спуска по подземелью дальше и дальше. 

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

Как в Darkest Dungeon, где у вас будет группа приключенцев, сражающихся с мистическим ужасом, и только со смертью последнего игра закончится. Или в платформере Dead Cells, недавнем российском проекте Loop Hero, где герой ходит по кругу и подстраивает локации под себя, Spelunky, The Binding of Isaac, менее известных Abyss Odyssey и Road not taken, где каждый следующий ваш персонаж продолжает дело умершего. Во множестве этих игр вы также можете включить пермасмерть.

Мало кто замечает, но даже Sunless Sea — тоже облегчённый рогалик, где есть перманентная смерть и случайный мир, полный событий и проработанных квестов, включая романтические линии. Количество контента в ней поражает: хоть острова в подземном (!) море каждый раз располагаются по-разному, вы сможете посетить их все и напишете в этом мире свою летопись приключений. Ещё взгляните на Enter the Gungeon, да даже Boyfriend Dungeon (да, там можно крутить романы с оружием, советую заценить). 

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

Когда игрок побеждает уже 50-й раз, но диалоги всё ещё не заканчиваются

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

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

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

Здравствуйте

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

Cause of death: «Noita» (A 2020 Highlight Reel). В Noita всё взаимодействует со всем в буквальном смысле — на уровне каждого пикселя.

@...D..$$$


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

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

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

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

Adblock test (Why?)

[Перевод] Тестирование программного обеспечения для космоса (интервью с разработчиком из SpaceX)

image

Stack Overflow побеседовал с Эрин Ишимотича, инженером в группе Software Delivery Engineering из Чокто Нейшн в Оклахоме. Ишимотича, работающая инженером на постоянной основе уже 15 лет, начала свою карьеру с написания скриптов shell и Perl, а в SpaceX работает уже около двух лет.

Проверять, проверять и еще раз проверять


Работа отдела Software Delivery Engineering, по словам Ишимотича, заключается в координации надлежащей практики разработки и тестирования программного обеспечения в компании SpaceX, обеспечивая, чтобы все, кто пишет код для космических аппаратов, использовали надлежащие методы контроля версий и проходили автоматизированное и человеческое тестирование, управляемое системой непрерывной интеграции (CI).
«Мы разрабатываем и поддерживаем нашу собственную систему CI», — сказала она. «У нас есть веб-служба, которая создает отчеты — она получает телеметрию от тестов программного и аппаратного обеспечения, строит графики и имеет свои собственные утверждения, которые она выполняет на основе данных, создавая отчет о том, как работает программное обеспечение».

Это означает, что специалисты из Software Delivery Engineering занимаются разработкой, тестированием и DevOps, в команде около 15 инженеров, включая специальную команду Software Reliability Engineering (SRE).
Контроль качества программного обеспечения для космических аппаратов отличается от обычных корпоративных или потребительских приложений. Требования к нему довольно высоки. «Вы можете посмотреть на классификацию программного обеспечения NASA — об этом есть много общедоступной информации. Мы делаем нечто подобное. Существует несколько различных стандартов качества, которые применяются к программному обеспечению, начиная от инструментов CI и заканчивая летным программным обеспечением, которое обеспечивает критически важные функции безопасности для экипажа».

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

Прикрываем друг друга


Процесс разработки, по-видимому, это agile, с проектированием на основе тестирования и несколькими инженерами, постепенно вносящими изменения в код.
«Большую часть времени мы работаем с концепцией ответственного инженера, который берет тикет — проблему — из бэклога». Затем ответственный инженер работает над проблемой, начиная с понимания сути проблемы и доводя ее до конца, возможно, даже развертывая новое программное обеспечение.

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

Процесс не является законченным, когда ревью завершено. «Когда PR сливается, я отвечаю за то, чтобы следующий тест на мастере прошел в CI. А затем мы приступаем к верификации».

Среда CI основана на [HT Condor], системе управления рабочей нагрузкой для интенсивных вычислений, которая возникла в High Throughput Computing Group Висконсинского университета в Мэдисоне. Эта система ценится в SpaceX за ее мощные возможности управления очередями, приоритетами заданий и ресурсами — особенно для испытательных стендов HITL (Hardware-in-the-loop, подробнее о них позже).

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

Управление сборками и ракеты на столе


Платформа построена на PostgreSQL для управления метаданными о сборках, результатах тестирования и других артефактах, наряду с большим количеством Python и C/C++.

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

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

Мы поинтересовались, как в Software Delivery Engineering работают с оборудованием. «Мы не так часто работаем с оборудованием транспорта, как с оборудованием центров обработки данных», — сказал Ишимотича. «Мы постоянно перестраиваем рабочие системы и добавляем оборудование в систему CI. У нас около 550 малых, средних и больших воркеров, выполняющих различные виды работ. Маленький воркер имеет два ядра, а наши большие воркеры имеют 28 ядер и 32 гигабайта памяти».

Есть одна классная часть работы, которая связана с игрой на реальном оборудовании. «У нас также есть тонна испытательных стендов, подключенных к системе CI. Мы называем эти тесты HITLs, произносится „хиттлз“, что означает „аппаратное обеспечение в цикле“. Это единичные, сделанные на заказ, буквально все внутренности ракеты разложены на столе. У нее нет ни топливных баков, ни двигателей, но есть все бортовые компьютеры и датчики». Она рассмеялась. «У нас есть один для сидений на Dragon 2, и в нем есть приводы, мы можем перемещать сиденья». Вам не нужно быть ученым-ракетостроителем, чтобы стать инженером-испытателем, но довольно забавно быть инженером-испытателем, который работает с настоящими физическими ракетами.



image
Вакансии
НПП ИТЭЛМА всегда рада молодым специалистам, выпускникам автомобильных, технических вузов, а также физико-математических факультетов любых других высших учебных заведений.

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

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

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



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

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

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


Список полезных публикаций на Хабре

Adblock test (Why?)

Исследование: самые популярные посты на Facebook — плагиат

Журналист The Verge подробнее изучил отчет Facebook о самых популярных постах. Выяснилось, что в топе рейтинга оказались материалы с заимствованным контентом.

Топ самых популярных постов Facebook
Топ самых популярных постов Facebook

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

Пост № 1 в отчете, мем от коуча Гопала Даса, представляет собой набор букв и слов под сообщением «Первые три слова, которые вы видите, — это ваша реальность». Первоначально он был опубликован более года назад, но продолжает набирать популярность и сегодня: на данный момент число просмотров превысило 80,6 млн.

Однако Дас позаимствовал данный мем из твиттера рэпера M.anifest из Ганы. Этот твит представляет собой самый ранний экземпляр мема в поиске по изображениям, хотя, возможно, сам рэпер позаимствовал его.

Пост № 2 от музыканта Эйса Гутта представляет собой изображение с надписью «Я стар, но смотрю Young Challenge. Разместите фото те, кому 30 лет и старше». Его увидели более 61 млн человек, и 5 млн ответили в комментариях. Но, судя по поиску, такой челлендж запускали в Facebook еще в 2020 году — вот, к примеру, сообщение от одного пользователя в октябре прошлого года.

На третьем месте топа фигурирует пост от авторов утреннего шоу Техаса, Daytime with Kimberly & Esteban, где зрителей спрашивают: «Что вы никогда не будете есть, независимо от того, насколько вы голодны?». 58,6 млн человек оценили этот пост, из них 2,7 млн ответили в комментариях. Однако варианты этого вопроса уже много лет гуляют по твиттеру и на страницах мемов.

Под номером 5 оказался пост «жены, мамы, писателя» Кристины Уоттс, которая начала спор о том, содержат ли спагетти сахар. Его увидели 58,6 млн человек. Но комик Стив Харви опубликовал в твиттере аналогичный вопрос менее чем за неделю до этого.

На шестом месте оказалось сообщение американского президента Джо Байдена, которое набрало 52,8 млн просмотров. Однако и он репостнул твит.

Автор исследования делает вывод, что почти все посты из топ-20 Facebook были позаимствованы с Reddit, Quora, Twitter или других сайтов.

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

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

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

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

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

Так, 15-я из самых просматриваемых ссылок ведет на сайт интернет-магазина, где продается мемориальный флаг Вьетнама. Она продвигаются через серию мемов, которые каждые несколько часов публикуются на страницах Facebook, предназначенных для ветеранов. Эти посты размещают на страницах «Ветераны Ирака и Афганистана» и «Ветераны Вьетнама». В сумме у них более 350 тысяч фолловеров. А сам пост со ссылкой набрал 37 млн просмотров за три месяца.

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

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

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

В топе нынешнего отчета оказалась статья газеты Chicago Tribune о «совершенно здоровом докторе», который умер через две недели после вакцинации. Кроме того, в топе популярных страниц соцсети обнаружилось ультраправое издание Epoch Times.

Adblock test (Why?)

Она могла стать Первой: история процессорной архитектуры Alpha (часть 1)


Впервые об архитектуре Alpha я узнал вскоре после обретения своего первого ПК, осенью 2001 года. Это были не слишком свежие (примерно 1997-1998 года) страдания неизвестного автора о платформе AlphaPC, материнской плате удивительной производительности и поражающих возможностей в формате АТХ. С тех пор эта архитектура запала мне в душу, долгое время борясь за место в сердце с не менее прорывным Pentium Pro. Сейчас представители обоих направлений располагаются в коллекции «Digital Vintage» на расстоянии менее 1 см друг от друга.
Три — эльфийским владыкам в подзвездный предел;
Семь — для гномов, царящих в подгорном просторе;
Девять — смертным, чей выверен срок и удел.
И Одно — Властелину на черном престоле
В Мордоре, где вековечная тьма:
Чтобы всех отыскать,
Воедино созвать
И единою черною волей сковать
В Мордоре, где вековечная тьма.

Дж.Р.Р. Толкин, перевод И.Б. Гриншпуна

Пока за право стать «единым кольцом» борются ARM и RISC-V, давайте вспомним историю «третьего эльфийского кольца», архитектуры, которая могла стать основной на рынке, но, как водится, не стала — Digital Alpha. Она же AXP, она же просто Alpha.

Alpha не была первой архитектурой, рожденной в недрах одной из величайших компьютерных компаний ХХ века. Ее угораздило стать третьей и последней (отсюда и отсылка к Кольцам Власти Средиземья) — после PDP (на самом деле, это семейство архитектур) и VAX. Планы были поистине наполеоновскими: Alpha имела шансы заменить х86, по крайней мере в верхнем сегменте.

Digital пошла на удивительные по меркам рынка RISC-систем меры — выпускала материнские платы для сторонних производителей, лицензировала выпуск процессоров другим фирмам (упс, одной!). Для нее были адаптированы основные операционные системы — Unix и даже Windows NT (!). Но все же что-то пошло не так.

Сначала в 1998 году Digital со всеми «потрохами» досталась Compaq, которая была, без сомнения, рада получить среди прочего собственную RISC-архитектуру. Но спустя чуть больше трех лет произошло слияние HP и Compaq. У HP уже была своя PA-RISC, на замену которой был только что выпущен микропроцессор Itanium, созданный совместно с Intel. И еще одна архитектура компаниибыла нужна «как собаке запасное колесо». Alpha перестала развиваться, продержалась в производстве еще четыре года и была тихо предана забвению.

Кто заменит VAX


История Alpha начинается в тот момент, когда в 1985 году руководство Digital приняло судьбоносное решение: будущее за RISC-процессорами. Основанные на подходе CISC системы VAX на тот момент производились всего 8 лет — первая машина VAX-11/780 (“-11” было отсылкой к совместимости с популярными PDP-11) вышла в октябре 1977 года.
VAX 11-780 TSD. Источник изображения.
Архитектура была полноценно 32-битной и поддерживала виртуальную память. Последнее было одной из ее главных особенностей, настолько важной, что было вынесено в название — Virtual Address eXtensions. Главной операционной системой для VAX была VMS (Virtual Memory System). Но в реальности Unix, зародившийся когда-то на PDP, уже привычный для пользователей и разработчиков, только набирал популярность.
Лирическое отступление. Еще при жизни компании многие из ее сотрудников не любили аббревиатуру DEC, предпочитая называть ее Digital. Поддержим эту традицию.
При появлении один только процессорный модуль, собранный на TTL-логике, занимал шкаф размером 1,2 на 1,5 метра, но уже к 1983 году стали доступны системы MicroVAX (Micro — это не размер машины, а микропроцессор), в которых процессор занимал одну 68-выводную микросхему, еще одну такую же занимал FPU.
MicroVAX 3600 (слева) и принтер. Источник изображения.
Первый MicroVAX обеспечивал всего 30% производительности оригинальной модели. Но уже два года спустя производительность MicroVAX сравнялась с первым VAX. Прогресс в области микроэлектроники тогда творил чудеса, но CISC-чипы становились все сложнее и сложнее, в конце концов — слишком сложными.

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

В итоге, несмотря на перенос основного внимания на RISC-чипы, VAX-системы продолжали разрабатываться аж до 2000 года (!), а выпускаться — до 2005. Впрочем, уже к середине 90-х они уступили своим преемникам в борьбе за производительность. Уделом стала работа уже разработанным для них и PDP огромным количеством программного обеспечения.

PRISM: на полпути к Alpha


Проект PRISM, стартовавший в 1985 году, не был первой пробой RISC-технологий в Digital, но именно на эту разработку были брошены главные силы и именно от нее ждали прорыва в производительности и функциональности. PRISM (Parallel Reduced Instruction Set Machine) должен был стать 32-битным RISC-процессором.Основным конкурентом для него виделось семейство процессоров Motorola 68k, также 32-битное, но относящееся к CISC-решениям.

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

За 1985-1986 годы была выполнена большая часть работы над проектом, его готовность оценивалась в 98%. Параллельно разрабатывались две версии: Crystal для миникомпьютеров и мейнфреймов, на базе эмиттерно-связанной логики, и microPRISM для рабочих станций, на базе CMOS. Но летом 1987 года было принято решение, что новый процессор должен быть 64-битным, и проект пришлось срочно перерабатывать.

Осенью требования снова поменялись после выхода первой рабочей станции Sun на процессоре SPARC. Он был 32-битным и втрое опережал прежнего лидера — Motorola 68020. Теперь PRISM был нацелен только на рабочие станции и должен был остаться 32-битным. Разработка Crystal была свернута.

К началу 1988 года ядро CPU было почти готово, кроме FPU и MMU (блок управления памятью). Эти компоненты разрабатывались не с нуля — в основу лег чипсет Rigel для VAX 6000, но было принято отложить их и довести до завершения само ядро — эта работа была выполнена уже к апрелю. В это время планировалось сохранить VAX как основу для продуктов верхнего уровня (вместо Crystal), а к середине года стало понятно, что к моменту выхода PRISM уже перестанет быть конкурентоспособным.

Было принято решение выпустить собственную серию рабочих станций на процессорах MIPS. Они были несколько менее производительными, но заметно более дешевыми, а главное — их разработка должна была завершиться гораздо быстрее. Так появилась серия DECstation, а проект PRISM был отменен в июле 1988 года.

DECstation 5000/200. Источник изображения.
Интересно, что демонстрационные образцы могли работать на частотах 50-80 МГц, против 16-20 МГц у MIPS, производительность отличалась пропорционально. Вот только MIPS были уже доступны, а у PRISM впереди еще год, а то и два до запуска в серию.

Последствия отмены проекта неожиданно сказались на всей компьютерной индустрии — Digital покинул Дэйв Катлер, один из ключевых разработчиков VMS и извечный критик Unix. Вскоре он начал работу в Microsoft, где возглавил проект разработки операционной системы, ныне известной как Windows NT. Многие особенности работы с памятью и хранилищем (и не только!) были привнесены в ядро системы из системы VMS.

Электрический огурец


Но если для PRISM это был конец, то для Alpha — только начало. Идея проекта сформировалась не сразу. Первой концепцией был RISC VAX — машина, которая выполняла бы основные инструкции VAX, а остальные реализовывались бы на уровне микрокода (предвестник грядущего RISC86). В рамках этой концепции проект немного поштормило — от RISC со своим набором инструкций и реализацией VAX поверх них до выноса замены части инструкций VAX на уровень языка программирования.

Итогом же стал практически возврат к одной из итераций концепции PRISM — 64-битный RISC-процессор, оптимизированный для выполнения VMS и ее программ без каких бы то ни было изменений, чтобы требовалась только перекомпиляция. Новая архитектура получила имя Alpha, полное же маркетинговое название было Alpha AXP, что послужило поводом для шуток — AXP расшифровывали как Almost eXactly PRISM — “почти в точности PRISM”.

Сами же микросхемы были маркированы DECchip 21х64, где 21 обозначает XXI век, 64 — разрядность процессора, а х — номер поколения, начиная с нуля. На этом Digital не успокоилась: процессоры получили еще одно внутреннее обозначение — EV4 (первое поколение — 21064), где EV означало Extended VAX. Также есть и неофициальная версия, что EV – это “Electric Vlasic” — отсылка к шуточному исследованию 1989 года о светимости маринованных огурцов (и не только их) под действием высокого напряжения.

Впрочем, до выхода первого коммерческого образца чипа оставалось еще много времени. Пока же для отладки программной части, в том числе прошивки, получившей имя SRM (внезапно System Reference Manual — по названию документа, где она была описана), и микрокодов — PALcode, были выпущены тестовые чипы EV3, лишенные FPU и оснащенные лишь 1 Кбайт кэша. Тестовые образцы были выпущены по 1 мкм техпроцессу в 1991 году и работали на частоте 100 МГц.

Микропроцессор 21064 в корпусе. Источник изображения.
А уже в феврале 1992 года состоялся релиз основной линейки. DECchip 21064, выпущенные уже по 0.75 мкм техпроцессу, насчитывали 1,68 миллиона транзисторов (площадь кристалла 234 мм2) и работали на частоте от 100 до 150 МГц. Сравните это с 66 МГц i486DX2, пусть даже при меньшей эффективности Alpha в целочисленных вычислениях!

При этом в вычислениях с плавающей запятой Alpha опережала процессоры Intel в разы. Объем кэша составлял 16 Кбайт (L1, 8 Кбайт для инструкций и 8 Кбайт для данных), внешний L2 кэш (B-cache) — до 16 Мбайт(!). На момент релиза это был самый производительный микропроцессор в мире. Цены, впрочем, не отставали — старшая модель стоила $1560 в партиях от 1000 штук.

Любопытный факт: “ножки” сверху корпуса процессора служили чисто утилитарной цели — на них навинчивался гайками радиатор охлаждения. Простое и эффективное решение, к сожалению, не получившее дальнейшего развития.
Закономерный вопрос: как же Digital удалось достичь таких частот при сравнимом с i486 техпроцессе? Во-первых, RISC-процессоры проще и используют меньшее число транзисторов, что сразу дает более высокий частотный потенциал. А во-вторых, и в этом главный секрет успеха — разработчики вручную выполняли операции, связанные с проектированием разводки процессора на кристалле. Это крайне трудоемкая методика, но она позволяла в то время получить лучшую оптимизацию, чем использование программных средств.
Хотите еще статей про архитектуры? Их есть у нас:

Открытость — ключ к успеху


Изначально в планах было сделать Alpha открытой платформой — Digital манил успех Intel и платформы IBM PC. И в отличие от многих других RISC-проектов, Alpha действительно нашла применение не только в фирменной технике своего создателя. Вскоре после анонса архитектуры свои системы на основе чипов Alpha представили и независимые производители. Большинство из них использовали системные платы производства Digital, но были и собственные разработки.

Сначала Digital не представила готовые наборы микросхем для построения материнских плат для Alpha, свои же платы компания разработала с использованием заказных микросхем, стыковавших 128-битный интерфейс шины процессора (работала с половиной частоты процессора, возможно использование половины ширины шины) с периферийными шинами.

Это позволило уменьшить номенклатуру изделий в переходный момент — PCI только разрабатывалась, EISA имела сильные позиции в верхнем сегменте рынка, хотя выбор карт для нее был ограничен, Но также сильно усложняло разработку сторонних продуктов, и вскоре появилась серия PCI-чипсетов Apecs, DECchip 21070, выпускавшаяся в двух вариантах:

  1. 21071 — для рабочих станций начального уровня, которые поддерживали до 2 Гбайт ОЗУ и использовали 64-битный интерфейс памяти (модули SIMM устанавливались парами),
  2. 21072 — для более мощных однопроцессорных рабочих станций и серверов с поддержкой до 4 Гбайт памяти, а также тех, что использовали 128-битный интерфейс памяти.

Это позволило платформе завоевать популярность у сторонних производителей. Системы с Alpha выпускали Polywell, Carrera Computers, Aspen Systems, NekoTech (неизвестная мне прежде компания с чудесным названием) и другие относительно небольшие фирмы. Заинтересовались ими и такие гранды, как NetApp (тогда еще просто Network Appliance, компания применила Alpha в своих системах хранения данных) и Cray Research. Системы на основе этой архитектуры заняли значительную долю рынка рабочих станций и даже высокопроизводительных ПК.

Полный вперед


Растущая популярность платформы подкреплялась ее постоянным развитием. Уже через год вышли 166 и 200 МГц модели, выполненные уже на 0.675 мкм техпроцессе (EV4s). А в конце 1993 года было представлено (стало доступно в 1994 году) первое большое обновление — EV45, с удвоенным кэшем первого уровня (32 Кбайт) и частотами уже до 275 МГц (300 МГц модель увидела свет в 1995 году)! Число транзисторов достигло 2,85 миллиона, но площадь кристалла стала значительно меньше — 164 мм2 при техпроцессе 0.5 мкм.

Еще до выхода EV45 была предпринята попытка выпустить более дешевую версию процессора и войти на рынок более массовых компьютеров среднего уровня. LCA4 (Low Cost Alpha) 21066 с частотами 100-166 МГц, появившаяся в начале 1994 года, и LCA45 21066А с частотами 100-266 МГц, конец 1994 года, имели 16 Кбайт кэша L1, лишились поддержки внешнего кэша и получили урезанную вдвое системную шину (64-бит) и интегрированный на кристалле северный мост чипсета с контроллером памяти и шины PCI. Это был первый процессор с интегрированным контроллером PCI.

Контроллер памяти поддерживал до 512 Мбайт памяти c ECC. В некоторых источниках упоминается встроенный 2D-видеоконтроллер с поддержкой до 8 Мбайт видеопамяти и встроенный L2 кэш, но подтверждений этому найти не удалось. Для встраиваемых решений были выпущены версии со сниженной частотой и низким тепловыделением — 21068 (66 МГц) и 21068A (100 МГц). Они выделяли всего 9 Вт против 21-33 Вт у старших моделей.

Если полные версии первого поколения оптимизировались в первую очередь для работы под управлением OpenVMS, хотя поддерживали все совместимые ОС, то младшие были ориентированы на работу с Unix (OSF/1, она же Ultrix, в будущем Tru64 Unix) и Windows NT, на которую возлагались огромные надежды, в ней видели ключ к еще большей популярности архитектуры.

История продолжается


Первые годы были очень успешными для Digital и для Alpha, очень многие верили в будущее архитектуры, в то, что она сможет заменить вездесущую х86 хотя бы в верхних сегментах рынка. Сама Digital рассчитывала использовать и развивать архитектуру в течении 25 лет. Но в то же время Intel, напротив планировала развивать свою х86 и зайти на территорию RISC.

Да, основным конкурентом Intel в ту пору была отнюдь не AMD и не кто-либо из еще многочисленных производителей х86 процессоров. Главными ее конкурентами были RISC-системы и в первую очередь эта тройка — Alpha, PowerPC и MIPS. Для них была выпущена Windows NT, а значит, они могли играть на одном поле. Впрочем, Unix и на х86 уже набирал популярность, и на горизонте взошла новая звезда по имени Linux…

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

P.S. В коллекции “Digital Vintage” пока нет ни одной машины с процессором Alpha первого поколения. Надеюсь, скоро удастся исправить это недоразумение. Как только такая машина окажется в коллекции, я обязательно подготовлю ее детальный обзор. Подписывайтесь на блог Selectel, чтобы не пропустить выход новых статей.

Adblock test (Why?)

Microsoft разрешит устанавливать Windows 11 на системы с неподдерживаемым процессором

По словам Зака Боудена (главного редактора Windows Central), инженеры из команды разработки Windows подтвердили, что Microsoft позволит устанавливать Windows 11 на системы с неподдерживаемым процессором.

Такие системы не получат обновление через Windows Update (поскольку Microsoft не хочет поощрять установку на неподдерживаемые ПК), но и чинить препятствия пользователям компания не собирается: при желании можно будет установить Windows 11 через Media Creation Tool, выбрав соответствующий пункт для обновления текущей системы, либо традиционно запустить установку с образа.

Прочие требования (наличие TPM, 4 ГБ оперативной памяти, системный диск объёмом не менее 64 ГБ, двухъядерный процессор и безопасная загрузка) остаются, но пользователи давно нашли способ их обойти (разумеется, нет гарантий, что эти хаки доживут до релиза).

Кроме того, список поддерживаемых процессоров был расширен. Теперь туда входят некоторые процессоры на архитектуре Skylake и Kaby Lake, а именно: процессоры для энтузиастов Core X (сокет 2066), рабочих станций Xeon W, а также мобильный Core i7-7820HQ при условии, что на устройстве установлены DCH-драйверы — это обеспечивает поддержкой Windows 11 моноблок Surface Studio 2.

Также Microsoft совместно с AMD тщательно протестировала работу Windows 11 на процессорах AMD Ryzen первого поколения и пришла к выводу, что они по-прежнему останутся неподдерживаемыми. Подробности не раскрываются, но существует гипотеза (имеющая, впрочем, несколько несостыковок), что это связано с аппаратной поддержкой MBEC, на которую опирается защита целостности кода HVCI (она может работать без аппаратной поддержки, но это заметно бьет по производительности).

Adblock test (Why?)

Vuetify  —  создаем свое простое приложение

Хоть UI библиотек или фреймворков для Vue.js не так уж и много, но Vuetify как раз здесь больше всего выделяется и по функционалу просто впереди других. Сегодня в этой небольшой статье я расскажу об данном UI фреймворке, его особенности, его структура и вообще к чему его можно применять. И честно в интернете не так уж и много русскоязычных материалов под данной теме, поэтому я решил что-то написать по Vuetify.

Введение/Установка

Окей, представим что вы решили все таки начать пользоваться Vuetify и написать какое-то своё первое приложение используя его. И начинается все конечно же с установки, для начала давайте создадим новое Vue CLI приложение с помощью npm:

vue create vuetify-app

Важно, надо чтобы приложение имело версию Vue 2.0, поскольку на время написания этой статьи в Vuetify поддержка идёт только для Vue 2.0 приложений. После того как нового приложение было создано  —  следующим шагом будет установить UI фреймворк как плагин:

vue add vuetify

Нас попросит в дальнейшем выбрать какой-то пресет, и поскольку мы не собираемся пробовать версию V3 (которая нестабильна), то мы выбираем пресет “Default”:

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

npm run serve

И открыв https://localhost:8080 мы увидим по-умолчанию созданную страницу от Vuetify с полезными сыллками:

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

Так о чем же будет наше приложение?

Хороший вопрос, ведь мы создали уже Vue CLI приложение и установили Vuetify, но я так и не сказал что же будет делать именно наше приложение. Мой любимый пример, это мобильное приложение по доставке еды  —  поэтому давайте это будет тема нашего приложения.

Но перед этим давайте также установим Vue Router:

vue add router

Как обычно при добавлении нового плагина к приложению, терминал может сказать что есть изменения которые не были добавлены в commit, мы здесь пишем “y” (т.е. yes) и двигаемся дальше:

Дальше при установке нас спросит хотим ли использовать режим истории в маршутизации, и здесь мы также тыкаем “y”:

Вот теперь Vue Router установлен, и самое время убрать код примеров в src/router/index.js чтобы когда мы сейчас запустили снова локальный сервер  —  не было ошибок:

// Файл src/router/index.js
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const routes = [
  
]
const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})
export default router

Файл маршутизации теперь настроен и не содержит в себе каких-то несуществующих маршрутов, ну а теперь нужно также почистить файл App.vue:

<!-- App.vue -->
<template>
  <div id="app">
    <!-- Сейчас мы будем здесь писать свой код-->
  </div>
</template>
<script>
export default {
  name: 'App'
}
</script>

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

Layout

В Vuetify уже есть своя придуманная гибкая система построения сетки в приложении. И давайте сейчас с ней ознакомимся. Для начала нам нужно будет воспользоваться двумя компонентами, это v-app и v-main. Открываем App.vue и добавляем их:

<template>
  <v-app>
    
   <v-main>
   </v-main>
    
  </v-app>
</template>
<script>
export default {
  name: 'App'
}
</script>

С компонента v-app и начинается наше приложение, этот компонент является псевдонимом тега <div> с id=”app”, а в компоненте v-main мы уже начинаем размещать контент самого приложения. Следующим шагом будет добавить хедер с помощью компонента v-app-bar:

<template>
  <v-app>
    
    <v-app-bar
      app
    >
    
    </v-app-bar>
    
    <v-main>
    </v-main>
    
  </v-app>
</template>
<!-- <script> -->

Если мы перейдем на локальный сервер  —  то увидим следующее:

А на странице пустовато
А на странице пустовато

На странице нету ничего кроме нашего хедера. Объясню также для чего я добавил атрибут app в v-app-bar. Когда Vuetify видит что в компоненте v-app-bar есть атрибут app, то он понимает что это часть layout’a приложения. Многие также могут спросить почему я добавил хедер перед v-main, ответ простой: в v-main будет уже располагаться компонент router-view который будет показывать содержимое маршрутов, а поскольку наш хедер это не сам контент приложения  —  то я и вынес его перед компонентом v-main.

Мне не очень нравится цвет хедера, поэтому давайте его поменяем добавив атрибут color:

<template>
  <v-app>
    
    <v-app-bar
      app
      color="red"
    >
      <!-- Сейчас добавим сюда title -->
    </v-app-bar>
    
    <v-main>
      <!-- Контент -->
    </v-main>
    
  </v-app>
</template>

Окей, и что если мы перейдем на локальный сервер? То вот что мы с вами увидим:

С красным цветом хедер выглядит уже намного лучше
С красным цветом хедер выглядит уже намного лучше

Круто, а теперь мы можем начинать добавлять уже какой-то контент? Да, но перед этим добавим также заголовок в хедер и компонент просмотра маршутов внутри v-main:

<template>
  <v-app>
    
    <v-app-bar
      app
      color="red"
    >
      <v-app-bar-title>
        <h3 class="text-h4 white--text">iFood</h3>
      </v-app-bar-title>
    </v-app-bar>
    
    <v-main>
      <router-view></router-view>
    </v-main>
    
  </v-app>
</template>

Заголовок мы добавили с помощью компонента v-app-bar-title, и уже внутри прописали тег h4 с классом от Vuetify которые помогают стилизировать текст. Давайте посмотрим как выглядит страница на локальном сервере:

Вот и наш заголовок появился
Вот и наш заголовок появился

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

Главная страница

Давайте создадим компонент src/components/List.vue в которым и будет выводиться весь список заведений с помощью JSON массива. Для начала внутри этого компонента создадим переменную items_list, которая и будет хранить в себе список всех заведений:

<!-- src/components/List.vue -->
<template>
  <div>
    <!-- Пока здесь будет пустой div -->
  </div>
</template>
<script>
export default {
  name: 'List',
  data: () => ({
    items_list: [
      {
        id: 0,
        title: 'Заведение 1',
        description: 'Это наверное самое крутое заведение которое вы можете знать',
        img: '' // Здесь добавляем любое изображение
      },
      {
        id: 1,
        title: 'Заведение 2',
        description: 'Lorem ipsum',
        img: '' // Здесь добавляем любое изображение
      }
      // Дальше можете добавить другие заведения в список
    ]
  })
}
</script>

Окей, список у нас есть, а с помощью каких компонентов от Vuetify будем его выводить? Сейчас воспользуемся компонентом v-card, который позволяет удобно в карточках выводить подобную информацию. Но при этом мы также воспользуемся Bootstrap Vue чтобы элементы красиво располагались на странице.

<!-- src/components/List.vue -->
<template>
  <v-container> <!-- Создаем контейнер внутри которого и будут элементы компонента -->
    
    <v-row class="list__cafes-title"> <!-- В это row выводим заголовок компонента -->
      <v-col>
        <h2 class="text-center text-h3 py-3">List of cafes</h2>
      </v-col>
    </v-row>
    
    <v-row class="list__cafes-content">
      <v-col md="4" v-for="item in items_list" :key="item.id">
        <v-card>
          
          <v-img
            height="250"
            :src="item.img"
          ></v-img> <!-- С помощью v-img добавляем изображение карточки -->
          
          <v-card-title> <!-- Заголовок заведения -->
            <h3 class="text-h4"></h3>
          </v-card-title>
          
          <v-card-text> <!-- Описание заведения -->
            <p class="text-body-1"></p>
          </v-card-text>
        
        </v-card>
      </v-col>
    </v-row>
  
  </v-container>
</template>

Многие могут заметить что в row’e где мы уже выводим сами карточки заведения с помощью v-for в компоненте v-col я добавляю атрибут md=”4". Те кто учили Bootstrap уже должны догадаться для чего нужен этот атрибут и как именно он задает размеры колонок. С помощью этого атрибута я указал чтобы каждая колонка имела размеры 4/12 и благодаря этому на странице карточки будут выводиться по 3 штуки в один ряд. Окей, компонент вывода заведений готов, надо теперь добавить его маршрут в файл src/router/index.js:

import Vue from 'vue'
import VueRouter from 'vue-router'
import List from '../components/List.vue'
Vue.use(VueRouter)
const routes = [
  {
    path: '/',
    name: 'List',
    component: List
  }
]
const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})
export default router

А теперь давайте перейдем на локальный сервер и посмотрим на результат вывода:

На декстоп и на мобайл выглядит нормально, можем двигаться дальше
На декстоп и на мобайл выглядит нормально, можем двигаться дальше

Супер​ У нас есть вывод заведений на главной странице. А теперь я думаю самое время добавить отдельную страницу заведения, которая будет открываться при клике на заголовок карточки. Поскольку у нас нету базы данных с которой мы могли бы брать определенное заведение через API  —  то сама страница будет статичной.

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

Для начала создаём компонент src/components/CafeView.vue и первое что в нем будет выводиться это изображение с заведением, его заголовок и описание. Для этой базовой информации мы создадим отдельный компонент с названием CafeInfo.vue, но перед этим заполним уже чем-то компонент CafeView.vue:

<!-- src/components/CafeView.vue -->
<template>
  <v-container>
    
    <CafeInfo></CafeInfo> <!-- Этот компонент мы сейчас создадим -->
    
  </v-container>
</template>

<script>
import CafeInfo from './Cafe/CafeInfo.vue'
export default {
  name: 'CafeView',
  components: {
    CafeInfo
  }
}
</script>

Хорошо, а теперь создаём компонент CafeInfo.vue:

<!-- src/components/Cafe/CafeInfo.vue -->
<template>
  <v-row>
    
    <v-col md="6">
      
      <v-card class="h-100">
        <v-img
          height="350"
          :src="main_info.img"
          class="d-flex align-end"
        >
          <!--
            Выше можете заметить что с помощью классов d-flex и align-end, мы прописали CSS свойства display: flex; и align-items: flex-end. Это сделает так что название заведения будет выводиться внизу внутри изображения
          -->
          <h2 class="text-h4 ml-4 mb-4 white--text"></h2>
        </v-img>
      </v-card>
      
    </v-col>
    <v-col md="6">
      
       <v-card class="h-100">
         
         <v-card-text>
          <p class="font-weight-light"></p>
         </v-card-text>
         
       </v-card>
      
    </v-col>
    
  </v-row>
  
</template>
<script>
export default {
  name: 'CafeInfo',
  data: () => ({
    main_info: {
      img: 'https://example.com/image_1.jpg',
      title: 'Заголовок заведения',
      description: 'А здесь уже описание заведения'
    }
  })
}
</script>

<style>
.h-100 {
  height: 100%;
}
</style>

Для удобства я специально поместил данные в data функцию. Теперь когда наш компонент готов  —  самое время сделать маршрут для компонента CafeView.vue в src/routes/index.js:

import Vue from 'vue'
import VueRouter from 'vue-router'
import List from '../components/List.vue'
import CafeView from '../components/CafeView.vue'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    name: 'List',
    component: List
  },
  {
    path: '/cafe/view',
    name: 'CafeView',
    component: CafeView
  }
]
// ...

Окей, а теперь давайте посмотрим как это выглядит вместе на локальном сервере на url http://localhost:8080/cafe/view:

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

<!-- src/components/List.vue -->
<template>
  <v-container>
    
    <v-row class="list__cafes-title">
      <v-col>
        <h2 class="text-center text-h3 py-3">List of cafes</h2>
      </v-col>
    </v-row>
    
    <v-row class="list__cafes-content">
      <v-col md="4" v-for="item in items_list" :key="item.id">
        
        <v-card>
          
          <v-img
            height="250"
            :src="item.img"
          ></v-img>
          
          <v-card-title>
            <router-link to="/cafe/view">
              <h3 class="text-h4"></h3>
            </router-link>
          </v-card-title>
          
          <v-card-text>
            <p class="text-body-1"></p>
          </v-card-text>
          
        </v-card>
        
      </v-col>
    </v-row>
  </v-container>
</template>

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

Компонент меню заведения

Сначала создайте компонент src/components/Cafe/CafeMenu.vue, и внутри него сначала создаем переменную с массивом внутри которого будут объекты с информацией об товарах:

<!-- src/components/Cafe/CafeMenu.vue -->
<template>
  <v-row>
    <!-- Пока здесь будет пустой row -->
  </v-row>
</template>

<script>
export default {
  name: 'CafeMenu',
  data: () => ({
    menu_items: [
      {
        id: 0,
        name: 'King Burger',
        img: 'https://example.com/burger_1.png',
        price: 34.99
      },
      {
        id: 1,
        name: 'Dark Burger',
        img: 'https://example.com/burger_2.png',
        price: 39.99
      },
      // Можете также дальше добавить другие товары 
    ]
  })
}
</script>

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

<!-- src/components/Cafe/CafeMenu.vue -->
<template>
  <v-row>
    
    <v-col md="6">
      <v-card>
        
        <v-img
          height="250"
          src="https://example.com/menu_img.png"
          class="d-flex align-end"
        >
          <h2 class="ml-4 mb-4 text-h3 white--text">MENU</h2>
        </v-img>
        
      </v-card>
    </v-col>
    
    <v-col md="6">
      <v-card>
        
        <v-card-text>
          <!--
            Здесь внутри начинаем выводить товары,
            для этого создаем список
          -->
          <v-list-item-group>
            
            <v-list-item v-for="item in menu_items" :key="item.id">
              
              <v-list-item-avatar>
                <!-- Выводим изображение товара -->
                <img :src="item.img" fluid />
              </v-list-item-avatar>
              
              <v-list-item-content>
                
                <v-list-item-title>
                  <!-- Выводим название товара -->
                  <h5 class="text-h5"></h5>
                </v-list-item-title>
                
                <v-list-item-subtitle>
                  <!-- Выводим цену товару -->
                  <b></b>
                </v-list-item-subtitle>
                
              </v-list-item-content>
              
              <v-list-item-action>
                <!-- Добавляем кнопку для покупки товара -->
                <v-btn icon>
                  <v-icon>mdi-plus</v-icon>
                </v-btn>
              </v-list-item-action>
              
            </v-list-item>
            
          </v-list-item-group>
        </v-card-text>
        
      </v-card>
    
    </v-col>
    
  </v-row>
</template>

С помощью компонента v-list-item-group мы создали список, внутри которого с помощью v-for в v-list-item вывели список всех товаров. Компонент v-list-item-content используется для того чтобы выводить контент самого элемента списка, в нашем случае мы выводим заголовок (v-list-item-title) и цену (с помощью v-list-item-subtitle). А с помощью v-list-item-action, внутри мы добавили кнопку покупки товара (v-btn), атрибут icon мы добавили чтобы указать что внутри кнопки выводиться только иконка.

Внутри v-icon мы указали иконку от Material Design. Окей, теперь когда я объяснил что к чему — можем подключить данный компонент:

<!-- src/components/CafeView.vue -->
<template>
  <v-container>
    
    <CafeInfo></CafeInfo>
    <CafeMenu></CafeMenu>
    
  </v-container>
</template>

<script>
import CafeInfo from './Cafe/CafeInfo.vue'
import CafeMenu from './Cafe/CafeMenu.vue'
export default {
  name: 'CafeView',
  components: {
    CafeInfo,
    CafeMenu
  }
}
</script>

Открываем локальный сервер и смотрим на результат:

Круто, но нашему приложению не хватает менюшки в хедере очень сильно. Поэтому давайте её сейчас добавим.

Создание навигации

Сейчас нам нужно перейти в компонент App.vue и добавить новый компонент v-navigation-drawer:

<template>
  <v-app>
    
    <v-navigation-drawer
      app
      left
    ></v-navigation-drawer>
    
    <v-app-bar
      app
      color="red"
    >
      <v-app-bar-title>
        <h3 class="text-h4 white--text">iFood</h3>
      </v-app-bar-title>
    </v-app-bar>
    
    <v-main>
      <router-view></router-view>
    </v-main>
    
  </v-app>
</template>

<script>
export default {
  name: 'App'
}
</script>

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

Выглядит немного страшновато, но сейчас мы это пофиксим. Добавлю также что v-navigation-drawer является одним из компонентов layout системы Vuetify, и именно он отвечает за меню навигации. Давайте добавим следующий код чтобы это меню срабатывало при клике на иконку в хедере:

<template>
  <v-app>
    
    <v-navigation-drawer
      app
      left
      absolute
      temporary
      v-model="drawer"
    ></v-navigation-drawer>
    
    <v-app-bar
      app
      color="red"
    >
      <v-app-bar-nav-icon @click="drawer = !drawer">
      </v-app-bar-nav-icon>
      <v-app-bar-title>
        <h3 class="text-h4 white--text">iFood</h3>
      </v-app-bar-title>
    </v-app-bar>
    
    <v-main>
      <router-view></router-view>
    </v-main>
    
  </v-app>
</template>

<script>
export default {
  name: 'App',
  data: () => ({
    drawer: false
  })
}
</script>

Зачем я добавил атрибуты absolute, temporary и v-model в v-navigation-drawer? Во-первых, absolute задает CSS свойство position: absolute; а это позволит сделать так чтобы эта менюшка и на мобайл хорошо отображалась. Во-вторых, temporary задает z-index для навигации — чтобы другие элементы не залазили на неё.

И во-третьих, v-model имеет в себе переменную drawer, которая в зависимости от значения true или false будет показывать меню. К примеру, если переменная drawer равняется в текущую момент значению true — то менюшка будет показываться. Если false, то менюшка будет спрятана. Если вы сейчас перейдете на локальный сервер — то увидите в хедере иконку и при клике на неё будет вылазить наше меню:

Вот здесь мы и можем увидеть иконку в хедере
Вот здесь мы и можем увидеть иконку в хедере
А при клике на саму иконку вылазит пустое меню с левой стороны
А при клике на саму иконку вылазит пустое меню с левой стороны

Теперь нужно чем-то заполнить меню, для этого создадим сейчас отдельную переменную с пунктами для меню:

<!-- ./ template -->
<script>
export default {
  name: 'App',
  data: () => ({
    drawer: false,
    menu_items: [
      {
        id: 0,
        name: 'Список заведения',
        url: '/'
      },
      {
        id: 1,
        name: 'О нас',
        url: '#'
      },
      {
        id: 2,
        name: 'Контакты',
        url: '#'
      },
      {
        id: 3,
        name: 'Помощь',
        url: '#'
      }
    ]
  })
}
</script>

А теперь выведем все это внутри v-navigation-drawer:

<template>
  <v-app>
    
    <v-navigation-drawer
      app
      left
      absolute
      temporary
      v-model="drawer"
    >
      
      <v-list-item-group>
        
        <v-list-item v-for="item in menu_items" :key="item.id">
          <v-list-item-title>
            <router-link :to="item.url"></router-link>
          </v-list-item-title>
        </v-list-item>
        
      </v-list-item-group>
      
    </v-navigation-drawer>
    
    <v-app-bar
      app
      color="red"
    >
      <v-app-bar-nav-icon @click="drawer = !drawer"></v-app-bar-nav-icon>
      <v-app-bar-title>
        <h3 class="text-h4 white--text">iFood</h3>
      </v-app-bar-title>
    </v-app-bar>
    
    <v-main>
      <router-view></router-view>
    </v-main>
    
  </v-app>
</template>

Готово, теперь если мы откроем меню то увидим следующее:

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

Итог

Окей, нам получилось сделать просто приложение с неким дизайном с помощью UI фреймворка для Vue.js — Vuetify. Можно было б и больше рассказать — но это сделало статью ещё более длинной, поэтому если кто-то хочет узнать более подробно по данной теме, то может посмотреть моё видео где мы создаём аналогичное приложение — только здесь уже идёт больше объяснений что и как и куда. Кому интересно может заглянуть.

Я лишь скажу что считаю Vuetify лучшим UI фреймворком для Vue.js, и использование его сильно облегчает разработку нового Vue приложения. Ведь тут уже столько всего поддерживает, и нам не приходится изобретать велосипеды.

Adblock test (Why?)