Работа со светом и оптикой: как начать карьеру еще в вузе — опыт выпускников четырех профильных магистратур

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

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


Фото Университета ИТМО

Работа в лаборатории вуза

Студенты Университета ИТМО, которые проявляют себя во время занятий, могут подключиться к работе над различными НИОКР. Они выполняются по заказу производственных предприятий страны. Так, магистранты приобретают реальные практические навыки, учатся взаимодействовать с профильными для себя работодателями плюс получают дополнительный доход во время обучения.

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

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

—Евгений Калугин, выпускник программы «Световодная фотоника» 2019 года


Фото Университета ИТМО

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

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

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

— Артем Петренко

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

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

Собеседования в компаниях

Знания и опыт, полученные на парах и в лабораториях Университета ИТМО, помогают без проблем проходить собеседования на профильные вакансии и работать в ведущих компаниях страны. По словам Ильи Красавцева, выпускника программы «Светодиодные технологии и оптоэлектроника», учебная программа университета полностью соответствует требованиям, предъявляемым работодателем. После магистратуры Илье удалось сразу занять руководящую должность. Он работает в компании SEAES, специализирующейся на производстве и продаже судового освещения. Аналогичный опыт сложился и у другого выпускника этой программы — Евгения Фролова.

Являюсь инженером в научной лаборатории по разработке и производству волоконно-оптических гироскопов на АО «Концерн «ЦНИИ «Электроприбор». Занимаюсь стыковкой оптического волокна с многофункциональной интегральной оптической схемой, выполненной на кристалле необата лития. Успешно пройти собеседование позволили знание основ волоконной и интегральной оптики, а также опыт работы с оптическим волокном на кафедре световодной фотоники.

— Евгений Фролов, окончил магистратуру в этом году

Поиск работы упрощает и тот факт, что директора и ключевые сотрудники многих предприятий лично ведут лекции в Университете ИТМО. Они рассказывают о технологических процессах и оборудовании, делятся опытом.


Фото Университета ИТМО

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

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

— Дмитрий Бауман, заведующий лабораторией факультета лазерной фотоники и оптоэлектроники и директор по научной работе ОАО «ИНТЕР РАО Светодиодные Системы»

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

Учебная программа соответствует всем требованиям, которые предъявляет сотруднику современный работодатель. В университете принимаешь активное участие в научно-исследовательской работе, получаешь опыт работы с лазерными установками и иным современным экспериментальным оборудованием, а также умение работать с инженерными, графическими и вычислительными программами: AutoCAD, КОМПАС, OPAL-PC, TracePro, Adobe Photoshop, CorelDRAW, Mathcad, StatGraphics Plus и другими.

— Анастасия Тавалинская, выпускник магистерской программы «Лазерные технологии»


Фото Университета ИТМО

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

Контракты с зарубежными коллегами

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

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

— Артем Петренко


Фото Университета ИТМО

Многие студенты Университета ИТМО во время обучения проходят практику за рубежом. После выпуска — получают предложения о долгосрочном сотрудничестве от российских и зарубежных работодателей.

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

P.S. Прием на «Световодную фотонику», «Светодиодные технологии и оптоэлектронику», а также «Материалы фотонику» и «Лазерные технологии» продолжается до 5 августа.


ссылка на оригинал статьи https://habr.com/ru/company/spbifmo/blog/462095/

Иван Пономарёв про Kafka Streams API на встрече jug.msk.ru

25 июля 2019 года прошла встреча московского сообщества Java-разработчиков jug.msk.ru, на которой Иван Пономарёв представил доклад про Kafka Streams API.


О докладчике

Иван преподаёт в МФТИ и одновременно является техническим лидером в компании КУРС, разрабатывающей платформу Course Orchestra. На jug.msk.ru с докладом второй раз, предыдущий раз был 21 сентября 2017 года.

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

  • «Скрытая сложность повседневной задачи: отображение табличных данных» (JPoint 2017: презентация, видео)
  • «Celesta: Создание бизнес-логики в Java-экосистеме» (SECON 2018: видео)
  • «Ansible playbooks — это код: проверяем, тестируем, непрерывно интегрируем» (DevOops 2018: презентация)
  • «Непрерывный статический анализ» (Стачка 2019: видео)
  • «Непрерывный статический анализ кода» (Heisenbug СПб 2019: презентация)
  • «Kafka Streams API: шаг за рамки Hello World» (JPoint 2019: презентация)

Прочие ссылки: GitHub, Twitter, Хабр.

О докладе

Андрей Когунь напоминает о ближайших конференциях (TechTrain 24-25 августа, Joker 25-26 октября и DevOops 29-30 октября) и открывает встречу.

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

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

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

Презентация доклада: на Speaker Deck и GitHub, код примеров, видео скоро появится (см. ссылки ниже).

Ссылки по jug.msk.ru:

  • TimePad — анонсы встреч и регистрация на них, подписка на оповещение по почте о встречах
  • YouTube — видео докладов
  • Speaker Deck — презентации докладов
  • VK — анонсы встреч, фотоотчёты, ссылки на материалы прошедших встреч
  • Twitter: учётная запись (анонсы встреч, фотоотчётов, видео) и хэштег (твиты с комментариями о встречах)
  • Хабр — обзоры встреч, найти все обзоры можно по тегу

24-25 августа 2019 года в Санкт-Петербурге пройдёт IT-фестиваль TechTrain 2019, на котором на стенде jug.msk.ru можно будет встретиться и пообщаться как с участниками сообщества, так и с докладчиками конференции.


ссылка на оригинал статьи https://habr.com/ru/company/jugru/blog/461793/

Тестдрайв Audi e-tron

В 2009 году Audi представила концепцию семейства электромобилей (и гибридов) e-tron. На выставках показывали концепты, давали обещания, прогнозировали, конструировали, удивляли, опять давали обещания, готовили платформу и вот спустя каких-то 10 лет e-tron поступили в продажу. На первоначальные концепты получившийся автомобиль был похож так же, как 2019 год похож на 2009 — цифры почти те же, а времена совсем не те.

2019 год. Лидер на рынке электромобилей всем известен. Остальные производители угрожают произвести на свет очередного «убийцу» iPhone Tesla. Пока не получилось ни у Nissan, ни у BMW, ни у Jaguar, ни у Hyndai, ни у… В общем, ни у кого не получилось. Посмотрим, чем вооружил своего «убийцу» Volkswagen Group.

Первый Audi e-tron в мой город (Victoria, BC, CA) привезли ещё зимой. Привезли, показали на пышной презентации под неплохую музыку, вина и закуски специально приглашённым гостям (владельцам премиум сегмента от VW) и тут же увезли. Его возили по всей стране из провинции в провинцию без возможности тестдрайва, зато с возможностью предзаказа. Несколько месяцев очень вялых продаж в Канаде привели к тому, что летом в моём городе их уже стояло 2 штуки в ожидании покупателя и одна для «прокатиться», чем я и не замедлил воспользоваться.

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

Пробег между зарядками — 329 км.
Разгон 0-100 км/ч — 5.7 сек.
Батарея — 95 кВт*ч.
Максимальная скорость зарядки — 150 кВт.
Полный привод.
Коэффициент аэродинамического сопротивления — 0.28
Цена в США — от $74,800 USD

Нужно отдать должное Audi. В отличии от всех остальных крупных производителей она не испугалась постеснялась разместить e-tron на главной странице своего сайта в Канаде:

В 11 утра я написал письмо в Audi Victoria, а в 11:45 мне уже перезвонили и сообщили, что я могу сделать тестдрайв в любое удобное для меня время. В 12:15 я уже был в магазине:

Почему я акцентирую на этом внимание? Потому, что это новый и очень редкий автомобиль, прокатиться на котором должно быть много желающих, а значит должна быть очередь, которой не оказалось. Для сравнения — очередь на тестдрайв любой модели Tesla в Vancouver, BC, CA даже через несколько месяцев после начала продаж всё ещё составляла несколько дней (при том, что в Vancouver есть целых три Tesla Show Room). При этом у Tesla нет рекламной компании, а про e-tron тут рассказывают из каждого «утюга» — в рекламе по телевизору, в кинотеатрах, журналах, обзорах и даже Горнолыжный Кубок Мира 2018-2019 был «со старта до финиша» завешан плакатами официального спонсора Audi e-tron.

Так или иначе мне это было на руку и вот я в магазине — e-tron единственный, кого выставили на улицу для привлечения покупателей:

Я попросил поставить мой автомобиль на зарядку (у Audi Victoria есть как level 2 зарядки так и быстрая 150 кВт), показал Driver’s License, меня очень коротко спросили какой именно автомобиль я ищу, предполагаемый сценарий использования, что для меня могло бы оказаться самым важным в автомобиле, угостили неплохим кофе и, наконец-то проводили к электромобилю от Audi:

Со слов менеджера. Да, кстати, почти всё, о чём я уже написал и буду рассказывать дальше это либо информация от менеджера, либо мои личные субъективные, а значит не точные и не претендующие на истину оценки. Так вот. Со слов менеджера у автомобиля уникальный цвет, кроме этого высочайшее качество изготовления — например, кузовные панели соединяются лазерной сваркой. Автомобиль выглядит относительно небольшим — по размеру что-то между Audi Q5 и Audi Q7. Я бы сказал, что внешне он «невзрачный», особенно на фоне других Audi 2019 года. Всему виной гладкая облицовка радиатора, модные сейчас но всё так же неудачные «аэродинамичные» колёса и какие-то совсем скромные, простые и несколько сглаженные формы:

Догадаться, что это электромобиль издалека можно, например, по дискам:

e-tron рядом с другими Audi:

Двери разблокируются с помощью обычного брелка — такого же как у остальных Audi. При этом удобно, что не нужно нажимать кнопку на самом брелке или двери — она разблокируется сама, когда владелец с брелком в кармане потянет ручку двери на себя, а для того, чтобы заблокировать нужно просто провести рукой с внешней стороны ручки. Что может быть удобнее? То, что сделала Tesla в Model 3 — машина открывается и закрывается автоматически когда владелец приближается или уходит с телефоном с включенным bluetooth — вообще никаких лишних брелков и движений. Приходишь ко всегда открытому автомобилю и никогда не нужно думать о том, закрыл его или нет, когда ушёл. Но тут, опять же, есть небольшое но. На примере моего хорошего друга. У него телефон на Android (какой-то Samsung из последних) и изредка Model 3 не открывается, когда он подходит к нему — приходится перезапускать bluetooth. У его жены iPhone X и с ним проблем не возникает.

Багажник очень вместительный:

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

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

Задний ряд сидений вместительный с «театральной посадкой» — т.е. сиденья располагаются высоко, что, по словам менеджера Audi улучшает обзор задних пассажиров и увеличивает безопасность при боковом ударе. Сидеть удобно — очень большое пространство между коленями и передним сиденьем, но при моём не самом большом росте (182 см) я был близок к тому, чтобы задевать головой потолок. Есть своя зона климат контроля, пара USB портов:

и широкий подлокотник с местом для хранения мелочей и двумя подстаканниками:

Я за USB-C, но лучше просто USB для задних пассажиров, чем вообще ничего (как у меня в машине).
Задние боковые окна можно закрыть дополнительными шторками (без привода). Вообще, задним пассажирам должно быть удобно — тепло, светло и мухи не кусают.

У автомобиля нет Self Driving, поэтом встаём с заднего дивана и открываем водительскую дверь:

Всё как в остальных классических Audi. Ничего необычного. Можно заметить память сидения с 2 установками. Кроме этого есть свои настройки водителя (до 4 человек) в мультимедиа системе. При этом они никак не связаны с памятью сиденья. Это более чем странно. Внимательный читатель, скорее всего уже знает, что будет дальше. Верно. Сейчас я опять расскажу как это работает в Tesla. В ней можно добавить несколько профайлов и в каждом будут сохраняться все настройки — начиная от положения сидений и руля и заканчивая предпочитаемой темой мультимедиа. При этом профайл в Tesla будет выбран автоматически согласно телефону с которым к автомобилю подошёл водитель.

Салон автомобиля в едином для топовых Audi 2019 года стиле.
Audi e-tron:

Audi Q8:

Audi A7:

Различия есть, но они совсем небольшие. Основная идея в том, чтобы всеми силами догнать и перегнать Tesla и всех остальных — вместо одного экрана поставить три и подарить большую тряпочку, чтобы протирать весь этот глянец. Audi на ДВС — зачем-то «позаимствовали» вентиляционную щель на всю (точнее почти всю) ширину салона как в Model 3 при этом это всего-лишь декорация — обдув самый обычный из 4 небольших зон.

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

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

Audi оставила кнопку Start/Stop. В электромобиле она лишняя и Tesla это блестяще показала — ты просто садишься и едешь выбрав направление движения (D/R/P). В Audi нужно кнопкой включить машину, а после выключить.
Разрешение экранов не самое большое — отлично видны пикселы. Ещё не совсем привычно то, что вместо обычного touch screen сделан force touch. Т.е. нужно не прикасаться, а именно нажимать с небольшим усилием на экран. Камера заднего вида, которая имеет самые разные режимы, в том числе 3d при использовании показалась менее удобной, чем просто вывод картинки с широкоугольной камеры на весь экран. Плюс цвет автомобиля в режиме 3d не совпадает с актуальным.
В голове постоянно стоял вопрос — если уж у Вас всё равно есть россыпь кнопок, то почему бы не добавить ещё несколько для климат контроля и можно будет смело выкинуть один из экранов.

Сиденья удобные. Какого-то обилия настроек нет (может быть где-то в меню на одном из экранов, не нашёл), зато есть и подогрев и вентиляция. Хотя, менеджер уверял меня, что кожа самая настоящая и высочайшего качества спина потеет примерно так же как и в Model 3, пока не включишь вентиляцию (которой у Model 3, к сожалению, нет).

Под капотом:

Но всё не так плохо. Ведь можно открыть ещё одну крышку и обнаружить там передний багажник:

Хотя. Нет. Всё совсем плохо — этот багажник смехотворно мал. Конечно, больше чем в Jaguar I-Pace, но в разы менее вместительный чем в любой Tesla.

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

Как опцию можно установить «розетки» с двух сторон автомобиля:

В самом низу переднего бампера установлен радар:

Но, время прокатиться. Кому-то всё равно какие у e-tron кнопки и экраны и важнее то, как он едет — настройки адаптивной подвески, полного привода и электромотора Audi, возможно, компенсируют все те недостатки, на которые я обратил внимание до начала поездки.

Спойлер

Нет. Не компенсировали.

Переключатель режимов выполнен в виде большой подставки для ладони с кнопкой-качелью слева — движение на себя Drive, от себя Reverse, ещё раз на себя Sport Mode, кнопка сбоку Parking. Многие стараются сделать что-то уникальное и Audi не отстаёт.

Включаем режим Drive. Едем. Первое, что бросается в глаза, точнее в уши — достаточно громкий искусственный звук для предупреждения пешеходов о том, что рядом едет автомобиль. Звучит как смесь шмеля с пылесосом. Звучит приятнее чем звук производимый громкоговорителем Hyndai Ioniq и тем более, чем звук Hyndai Kona, но лучше бы его вообще не было (как в Tesla). К сожалению, он не отключаемый, хотя и не необходим согласно законам Канады и США. На мой взгляд такой звук не нужен. Почему? Потому, что в данный момент многие автомобили с ДВС (тем более гибриды) на низкой скорости также не издают почти никаких звуков мотора и, насколько мне известно, нет исследований, доказывающих, что это «тишина» является причиной какого-то значимого числа ДТП. А если такое исследование есть, то почему нет закона, по которому и автомобилям с ДВС полагается такой же громкоговоритель?

Выбираем самый быстрый из доступных режимов Dynamic плюс Sport Mode. Ускоряемся. Замедляемся. Ускоряемся снова. Впечатление на меня, как владельца EV не производит никакого. Чувствуется, что автомобиль очень тяжёлый, поэтому нет той лёгкости и стремительности с самого старта, которая доступна Hyndai Ioniq и Tesla Model 3. Нельзя сказать, что он медленный. Он быстр. Очень. И прилично вжимает в кресло. Но такого сильного Вау эффекта, как на Tesla в нём при субъективном тесте нет (конечно, речь идёт о тех, кто уже некоторое время поездил на Tesla, а не о тех, кто пришёл из мира ДВС — для них это будет огромный прыжок из прошлого в будущее). Обычная динамика большого и по ощущениями очень тяжёлого электромобиля. Не более того.

Подвеска адаптивная и меняет клиренс и мягкость в зависимости от настроек. Едет значительно мягче, чем Model 3 и Ioniq но и поведение в поворотах также значительно более «ватное» — выше центр тяжести, больший вес, мягче подвеска.

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

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

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

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

Есть head-up display. Скорость, режим удержания полосы и ещё пара иконок проецируется на лобовое стекло. Выглядит нормально. Нужно лично мне? Нет.

Автопилота нет. Есть режим удержания полосы, который работает очень, очень, очень плохо (даже в сравнении с моим Ioniq) начиная только с 70 км/ч и адаптивный «умный» круиз контроль с возможностью полной остановки и продолжения движения. Удержание полосы у e-tron по сути бесполезная функция — даже на прямом участке шоссе автомобиль очень сильно плавает из стороны в сторону и постоянно просит держать руки на руле. Управление круиз контролем расположено не на руле, а на отдельном подрулевом переключателе, что также неудобно.

Навигация. Есть. Проверить как работает не получилось. Нажал на кнопку, сказал Audi Victoria, он надолго задумался над чем-то и предложил просто приехать в сам город Victoria из которого я и не выезжал во время теста. Я списал это на моё произношение и попросил сказать нужную фразу сопровождающего меня менеджера. Он (англоязычный native) сделал 3 попытки, выговаривая слова как можно чётче и понятнее. Не получилось — вероятнее всего система распознавания речи автомобиля Audi не могла понять слово Audi. В конце концов мы договорились ехать без навигатора.

Как вы уже, наверное, догадались — поездка не доставила мне никакого удовольствия. Менеджер в какой-то момент в пути спросил меня как автомобиль. Я задумался, как ответить ему мягче и деликатнее и он не дожидаясь ответа быстро сказал, что он просто работает в Audi и я могу быть с ним абсолютно честным — это поможет больше, чем если я стану нахваливать автомобиль. После чего я признался, что машина мне совсем не понравилась — очень тяжёлая, не очень быстрая, нет автопилота (которым я с удовольствием пользовался на Model 3), неуклюжа в поворотах, дорогая и непонятная. В общем, я не стал тянуть время и уменьшать и так совсем небольшой пробег до зарядки Audi e-tron и относительно быстро вернулся обратно в магазин, припарковал машину (камера заднего вида оказалась, действительно не удобной), отдал ключи и с удовольствием пересел обратно в свой Hyundai Ioniq Electric:

Почти случайно получилось так, что мой друг, владелец Model 3 в этот же день также сделал Test Drive Audi e-tron, но в Vancouver, BC, CA. Позвонил мне сразу после теста, долго ругал Audi и в целом повторял словами мои ощущения от поездки. Ему понравилось то, что автомобиль едет мягче чем Model 3, лучше звукоизоляция, лучше материал сидений, крупнее, вместительнее, но при этом какой-то медленный, ватный, нет автопилота, неудобный UI с кучей экранов и высокая цена.

Итого.

Плюсы:

  • Это Audi.
  • Сервисное обслуживание Audi.
  • Вероятно, действительно высокое качество сборки и комплектующих.
  • Вместительный.
  • Быстрый и отзывчивый (в сравнении с автомобилями с ДВС).
  • Хорошая шумоизоляция.
  • Комфортные сиденья из хорошей кожи.

Минусы:

  • Это далеко не Tesla.
  • Устаревшая идеология и концепции.
  • Плохие характеристики и по цифрам и по ощущениям.
  • Неоправданно высокая цена.
  • Не самый интересный внешний вид.
  • Неактуальный для 2019 года UI.

По моим личным ощущениям Audi постаралась сделать электромобиль как можно более похожий на автомобиль с ДВС и e-tron всем своим видом и поведением пытается сказать — «Я Audi! Такой же как Q5-Q7!». Проблема в том, что он значительно дороже даже Q7 S-Line, при этом обычному автолюбителю не предлагает почти ничего взамен, кроме экологичности, отзывчивости на педаль «газа» и прочих сопутствующих плюсах которые интересны далеко не всем.


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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Мы проанализировали мобильные версии ТОП-20 интернет-магазинов России по 44 факторам. Получили адскую таблицу из единиц и нулей, чуть не растворились к ней, но собрались с силами и описали, как и чем «достают» покупателя в топовом сегменте мобильного e-Commerce.

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

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Мы взяли не все параметры, но выделили 44 значимых фактора. Они объединены в девять групп:

Таблица с результатами анализа по каждому интернет-магазину — здесь. В статье пройдемся по каждому из 44 элементов мобильного юзабилити и поищем ключевые тренды. В каждом пункте мы указываем общую статистику: сколько магазинов используют/не используют этот прием.

Технологии

Спойлер. Интернет-магазины отказываются от мобильных версий в пользу «резиновых» сайтов, но скорость загрузки пока еще хромает.

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Адаптивность vs мобильная версия

14/6

Адаптивный сайт выигрывает перед мобильной версией (на отдельном поддомене вида m.site.ru). Его не нужно дополнительно администрировать, отсутствует проблема дублирования контента, используется один и тот же исходный код, что снижает расходы.

Не зря 70% топовых интернет-магазинов России работают именно на базе адаптивных сайтов. Мобильная версия — это что-то из прошлого.

«Оранжевая» зона PageSpeed Insights: все печально

2/20

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

Только 1 сайт из 20 проходит в «зеленую» зону при проверке в сервисе Google PageSpeed Insights. Но даже достижение «оранжевой» зоны пока затруднено — здесь тоже только 1 сайт. Остальные 18 сайтов набирают менее 50 баллов и попадают в «красную» зону.

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

Основные элементы шаблона

Спойлер. Есть явные тренды: меню «гамбургер», кликабельный номер телефона, поле поиска по сайту в хедере и заметная иконка корзины. Здесь лучше не креативить, а идти в ногу с лидерами рынка.

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Фиксированное меню

11/9

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

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

Кликабельный номер телефона

15/5

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Но, как видите, не все магазины придерживаются этого очевидного принципа.

Меню «гамбургер»

19/1

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Поиск магазинов

16/4

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

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

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

Контекст для интернет-магазинов на профессиональном уровне и без агентства — в системе PromoPult. Автоматический подбор слов, автоматическая генерация объявлений, «умное» управление ставками. Готовые отраслевые решения. Статистика в реальном времени.

Заметная корзина

17/3

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Фиксированное промо внизу экрана

4/16

Закрепите в нижней части экрана информацию о специальных предложениях либо особенный СТА, как это сделал «Утконос».

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Автоматическая ротация слайдов в главном баннере

7/13

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

Поле поиска в хедере: must have

20/0

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Слева — поиском заняли целую строку на небольшом экране. Справа — динамическое решение

Виджет онлайн-консультанта

3/17

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Протестируйте виджет на своей аудитории. Установите онлайн-консультант (если не хотите платить, в модуле повышения конверсии PromoPult есть бесплатный консультант GetSale), кастомизируйте его под ваш корпоративный стиль и посмотрите, сколько обращений/продаж будет за месяц. А там уже принимайте решение — оставить его или убрать.

Фильтры в каталоге

Спойлер. Фильтры в каталоге — это must have. Желательно — с одновременным выбором нескольких параметров. Не забываем и о фильтре по цене.

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Фильтры

19/1

Фильтры упрощают навигацию. Активное использование фильтров остается явным трендом.

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Фильтр, зафиксированный при прокрутке

3/17

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

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

Одновременный выбор нескольких параметров

19/1

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Выбор цвета

4/16

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Но отечественные магазины используют преимущественно текст.

Фильтр по цене

17/3

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

Элементы страницы каталога

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Автоподгрузка товаров вместо пагинации

3/17

Тапать по стрелочке «следующая страница» не так удобно, как просто листать вниз. Но вывод товаров не по 10-20-50 на страницу, а «бесконечной» лентой, которая подгружается по мере скролла, — пока еще экзотика.

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Просмотр нескольких изображений товара в каталоге

1/19

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Отметка «Новинка»

10/10

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Если же обновление ассортимента для постоянной ЦА — не ваша ключевая задача, обратите внимание на другие качества продукта и не тратьте место на значок «new!».

Просмотр вариантов товара на странице категорий

2/18

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Оценки товаров на странице категорий

15/5

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Отображение скидок — в категории и на карточке

18/2

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Плитка vs список

9/11

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Опция «Добавить в корзину»

16/4

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

Сравнение товаров

8/12

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

Элементы страницы товара

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Возможность увеличить картинку

16/4

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

Видео на странице продукта

9/11

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

Кнопки расшаривания в соцсетях

8/12

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

Элементы персонализации

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

«С этим товаром обычно покупают/просматривают…»

13/7

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Недавно просмотренные

9/11

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

Другие предложения

13/7

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

Добавление товара в корзину

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

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

20/0

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

Превью корзины при добавлении товара

6/14

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

Всплывающее окно с содержимым корзины

5/15

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Элементы корзины

Спойлер. Корзина — это важная конверсионная страница. Здесь нельзя допускать ошибок. Обязательно выводите изображение товара с кратким описанием. Среди полезных опций — указание сроков доставки, напоминание о преимуществах и возможность сохранить корзину. А вот от дублирования кнопки оплаты/заказа можно отказаться.

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Изображение и описание товара

20/0

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

Сроки отправки и доставки

5/15

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

Напоминание о преимуществах

2/18

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Сохранить корзину

3/17

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Кнопка «Оплата/Далее»

2/18

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

Элементы страницы оформления заказа

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Покупка без регистрации

14/6

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

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

Аккордеоны (разворачивающиеся разделы)

5/15

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

Мобильное юзабилити в e-Commerce: анализ ТОП-20 интернет-магазинов России

Динамическая проверка полей

12/8

Проверка корректности введенных данных по мере заполнения полей (а не после кнопки «отправить») экономит пользователям время и нервы — они сразу видят, что заполнено неправильно. На удивление — так делают не все.

Автозаполнение полей

12/8

Автозаполнение (адрес, телефон, email и т. д.) ускоряет оформление покупки и сокращает вероятность ошибок.

Информация о заказе на странице оформления покупки

13/7

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

Юзабилити для мобильных девайсов — не место для креатива

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

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

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

И все будет хорошо.


ссылка на оригинал статьи https://habr.com/ru/company/promopult/blog/461913/

Обзор бесплатного инструмента SQLIndexManager

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

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

Далее рассмотрим бесплатную утилиту SQLIndexManager, автором которой является AlanDenton.

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

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

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

Итак, перейдем теперь к самой утилите SQLIndexManager.

Приложение написано на языке C# .NET Framework 4.5 в Visual Studio 2017 и использует DevExpress для форм:

и выглядит следующим образом:

Все запросы формируются в следующих файлах:

  1. Index
  2. Query
  3. QueryEngine
  4. ServerInfo

При подключении к базе данных и отправке запросов к СУБД, приложение подписывается следующим образом:

ApplicationName=”SQLIndexManager”

При запуске приложения откроется модальное окно на добавление подключения:

Здесь пока не работает подгрузка полного списка всех экземпляров MS SQL Server, доступных по локальным сетям.

Также добавить подключение можно с помощью крайней левой кнопки на главном меню:

Далее запустятся следующие запросы к СУБД:

  1. Получение информации о СУБД

    SELECT ProductLevel  = SERVERPROPERTY('ProductLevel')      , Edition       = SERVERPROPERTY('Edition')      , ServerVersion = SERVERPROPERTY('ProductVersion')      , IsSysAdmin    = CAST(IS_SRVROLEMEMBER('sysadmin') AS BIT) 

  2. Получение списка доступных баз данных с их краткими свойствами

    SELECT DatabaseName = t.[name]      , d.DataSize      , DataUsedSize  = CAST(NULL AS BIGINT)      , d.LogSize      , LogUsedSize   = CAST(NULL AS BIGINT)      , RecoveryModel = t.recovery_model_desc      , LogReuseWait  = t.log_reuse_wait_desc FROM sys.databases t WITH(NOLOCK) LEFT JOIN (     SELECT [database_id]          , DataSize = SUM(CASE WHEN [type] = 0 THEN CAST(size AS BIGINT) END)          , LogSize  = SUM(CASE WHEN [type] = 1 THEN CAST(size AS BIGINT) END)     FROM sys.master_files WITH(NOLOCK)     GROUP BY [database_id] ) d ON d.[database_id] = t.[database_id] WHERE t.[state] = 0     AND t.[database_id] != 2     AND ISNULL(HAS_DBACCESS(t.[name]), 1) = 1 

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

Стоит отметить, что расширенная информация показывается, исходя из прав. Если есть sysadmin, то можно выбирать данные из представления sys.master_files. Если таких прав нет, то просто возвращается меньше данных, чтобы не замедлять запрос.

Здесь необходимо выбрать интересующие базы данных и нажать на кнопку “ОК”.

Далее будет выполнен следующий скрипт для каждой выбранной базы данных для анализа состояния индексов:

Анализ состояния индексов

declare @Fragmentation float=15; declare @MinIndexSize bigint=768; declare @MaxIndexSize bigint=1048576; declare @PreDescribeSize bigint=32768;  SET NOCOUNT ON SET ARITHABORT ON SET NUMERIC_ROUNDABORT OFF  IF OBJECT_ID('tempdb.dbo.#AllocationUnits') IS NOT NULL     DROP TABLE #AllocationUnits  CREATE TABLE #AllocationUnits (       ContainerID   BIGINT PRIMARY KEY     , ReservedPages BIGINT NOT NULL     , UsedPages     BIGINT NOT NULL )  INSERT INTO #AllocationUnits (ContainerID, ReservedPages, UsedPages) SELECT [container_id]      , SUM([total_pages])      , SUM([used_pages]) FROM sys.allocation_units WITH(NOLOCK) GROUP BY [container_id] HAVING SUM([total_pages]) BETWEEN @MinIndexSize AND @MaxIndexSize  IF OBJECT_ID('tempdb.dbo.#ExcludeList') IS NOT NULL     DROP TABLE #ExcludeList  CREATE TABLE #ExcludeList (ID INT PRIMARY KEY)  INSERT INTO #ExcludeList SELECT [object_id] FROM sys.objects WITH(NOLOCK) WHERE [type] IN ('V', 'U')     AND ( [is_ms_shipped] = 1 )  IF OBJECT_ID('tempdb.dbo.#Partitions') IS NOT NULL     DROP TABLE #Partitions  SELECT [object_id]      , [index_id]      , [partition_id]      , [partition_number]      , [rows]      , [data_compression] INTO #Partitions FROM sys.partitions WITH(NOLOCK) WHERE [object_id] > 255     AND [rows] > 0     AND [object_id] NOT IN (SELECT * FROM #ExcludeList)  IF OBJECT_ID('tempdb.dbo.#Indexes') IS NOT NULL     DROP TABLE #Indexes  CREATE TABLE #Indexes (       ObjectID         INT NOT NULL     , IndexID          INT NOT NULL     , IndexName        SYSNAME NULL     , PagesCount       BIGINT NOT NULL     , UnusedPagesCount BIGINT NOT NULL     , PartitionNumber  INT NOT NULL     , RowsCount        BIGINT NOT NULL     , IndexType        TINYINT NOT NULL     , IsAllowPageLocks BIT NOT NULL     , DataSpaceID      INT NOT NULL     , DataCompression  TINYINT NOT NULL     , IsUnique         BIT NOT NULL     , IsPK             BIT NOT NULL     , FillFactorValue  INT NOT NULL     , IsFiltered       BIT NOT NULL     , PRIMARY KEY (ObjectID, IndexID, PartitionNumber) )  INSERT INTO #Indexes SELECT ObjectID         = i.[object_id]      , IndexID          = i.index_id      , IndexName        = i.[name]      , PagesCount       = a.ReservedPages      , UnusedPagesCount = CASE WHEN ABS(a.ReservedPages - a.UsedPages) > 32 THEN a.ReservedPages - a.UsedPages ELSE 0 END      , PartitionNumber  = p.[partition_number]      , RowsCount        = ISNULL(p.[rows], 0)      , IndexType        = i.[type]      , IsAllowPageLocks = i.[allow_page_locks]      , DataSpaceID      = i.[data_space_id]      , DataCompression  = p.[data_compression]      , IsUnique         = i.[is_unique]      , IsPK             = i.[is_primary_key]      , FillFactorValue  = i.[fill_factor]      , IsFiltered       = i.[has_filter] FROM #AllocationUnits a JOIN #Partitions p ON a.ContainerID = p.[partition_id] JOIN sys.indexes i WITH(NOLOCK) ON i.[object_id] = p.[object_id] AND p.[index_id] = i.[index_id]  WHERE i.[type] IN (0, 1, 2, 5, 6)     AND i.[object_id] > 255  DECLARE @files TABLE (ID INT PRIMARY KEY) INSERT INTO @files SELECT DISTINCT [data_space_id] FROM sys.database_files WITH(NOLOCK) WHERE [state] != 0     AND [type] = 0  IF @@ROWCOUNT > 0 BEGIN      DELETE FROM i     FROM #Indexes i     LEFT JOIN sys.destination_data_spaces dds WITH(NOLOCK) ON i.DataSpaceID = dds.[partition_scheme_id] AND i.PartitionNumber = dds.[destination_id]     WHERE ISNULL(dds.[data_space_id], i.DataSpaceID) IN (SELECT * FROM @files)  END   DECLARE @DBID   INT       , @DBNAME SYSNAME  SET @DBNAME = DB_NAME() SELECT @DBID = [database_id] FROM sys.databases WITH(NOLOCK) WHERE [name] = @DBNAME  IF OBJECT_ID('tempdb.dbo.#Fragmentation') IS NOT NULL     DROP TABLE #Fragmentation  CREATE TABLE #Fragmentation (       ObjectID         INT NOT NULL     , IndexID          INT NOT NULL     , PartitionNumber  INT NOT NULL     , Fragmentation    FLOAT NOT NULL     , PRIMARY KEY (ObjectID, IndexID, PartitionNumber) )  INSERT INTO #Fragmentation (ObjectID, IndexID, PartitionNumber, Fragmentation) SELECT i.ObjectID      , i.IndexID      , i.PartitionNumber      , r.[avg_fragmentation_in_percent] FROM #Indexes i CROSS APPLY sys.dm_db_index_physical_stats(@DBID, i.ObjectID, i.IndexID, i.PartitionNumber, 'LIMITED') r WHERE i.PagesCount <= @PreDescribeSize     AND r.[index_level] = 0     AND r.[alloc_unit_type_desc] = 'IN_ROW_DATA'     AND i.IndexType IN (0, 1, 2)  IF OBJECT_ID('tempdb.dbo.#Columns') IS NOT NULL     DROP TABLE #Columns  CREATE TABLE #Columns (       ObjectID     INT NOT NULL     , ColumnID     INT NOT NULL     , ColumnName   SYSNAME NULL     , SystemTypeID TINYINT NULL     , IsSparse     BIT     , IsColumnSet  BIT     , MaxLen       INT     , PRIMARY KEY (ObjectID, ColumnID) )  INSERT INTO #Columns SELECT ObjectID     = [object_id]      , ColumnID     = [column_id]      , ColumnName   = [name]      , SystemTypeID = [system_type_id]      , IsSparse     = [is_sparse]      , IsColumnSet  = [is_column_set]      , MaxLen       = [max_length] FROM sys.columns WITH(NOLOCK) WHERE [object_id] IN (SELECT DISTINCT i.ObjectID FROM #Indexes i)  IF OBJECT_ID('tempdb.dbo.#IndexColumns') IS NOT NULL     DROP TABLE #IndexColumns  CREATE TABLE #IndexColumns (       ObjectID   INT NOT NULL     , IndexID    INT NOT NULL     , OrderID    INT NOT NULL     , ColumnID   INT NOT NULL     , IsIncluded BIT NOT NULL     , PRIMARY KEY (ObjectID, IndexID, ColumnID) )  INSERT INTO #IndexColumns SELECT ObjectID   = [object_id]      , IndexID    = [index_id]      , OrderID    = CASE WHEN [is_included_column] = 0 THEN [key_ordinal] ELSE [index_column_id] END      , ColumnID   = [column_id]      , IsIncluded = ISNULL([is_included_column], 0) FROM sys.index_columns ic WITH(NOLOCK) WHERE EXISTS(         SELECT *         FROM #Indexes i         WHERE i.ObjectID = ic.[object_id]             AND i.IndexID = ic.[index_id]             AND i.IndexType IN (1, 2)     )  IF OBJECT_ID('tempdb.dbo.#Lob') IS NOT NULL     DROP TABLE #Lob  CREATE TABLE #Lob (       ObjectID    INT NOT NULL     , IndexID     INT NOT NULL     , IsLobLegacy BIT     , IsLob       BIT     , PRIMARY KEY (ObjectID, IndexID) )  INSERT INTO #Lob (ObjectID, IndexID, IsLobLegacy, IsLob) SELECT c.ObjectID      , IndexID     = ISNULL(i.IndexID, 1)      , IsLobLegacy = MAX(CASE WHEN c.SystemTypeID IN (34, 35, 99) THEN 1 END)      , IsLob       = 0 FROM #Columns c LEFT JOIN #IndexColumns i ON c.ObjectID = i.ObjectID AND c.ColumnID = i.ColumnID WHERE c.SystemTypeID IN (34, 35, 99) GROUP BY c.ObjectID        , i.IndexID  IF OBJECT_ID('tempdb.dbo.#Sparse') IS NOT NULL     DROP TABLE #Sparse  CREATE TABLE #Sparse (ObjectID INT PRIMARY KEY) INSERT INTO #Sparse SELECT DISTINCT ObjectID FROM #Columns WHERE IsSparse = 1     OR IsColumnSet = 1  IF OBJECT_ID('tempdb.dbo.#AggColumns') IS NOT NULL     DROP TABLE #AggColumns  CREATE TABLE #AggColumns (       ObjectID        INT NOT NULL     , IndexID         INT NOT NULL     , IndexColumns    NVARCHAR(MAX)     , IncludedColumns NVARCHAR(MAX)     , PRIMARY KEY (ObjectID, IndexID) )  INSERT INTO #AggColumns SELECT t.ObjectID      , t.IndexID      , IndexColumns = STUFF((             SELECT ', [' + c.ColumnName + ']'             FROM #IndexColumns i             JOIN #Columns c ON i.ObjectID = c.ObjectID AND i.ColumnID = c.ColumnID             WHERE i.ObjectID = t.ObjectID                 AND i.IndexID = t.IndexID                 AND i.IsIncluded = 0             ORDER BY i.OrderID         FOR XML PATH(''), TYPE).value('(./text())[1]', 'NVARCHAR(MAX)'), 1, 2, '')      , IncludedColumns = STUFF((             SELECT ', [' + c.ColumnName + ']'             FROM #IndexColumns i             JOIN #Columns c ON i.ObjectID = c.ObjectID AND i.ColumnID = c.ColumnID             WHERE i.ObjectID = t.ObjectID                 AND i.IndexID = t.IndexID                 AND i.IsIncluded = 1             ORDER BY i.OrderID         FOR XML PATH(''), TYPE).value('(./text())[1]', 'NVARCHAR(MAX)'), 1, 2, '') FROM (     SELECT DISTINCT ObjectID, IndexID     FROM #Indexes     WHERE IndexType IN (1, 2) ) t  SELECT i.ObjectID      , i.IndexID      , i.IndexName      , ObjectName       = o.[name]      , SchemaName       = s.[name]      , i.PagesCount      , i.UnusedPagesCount      , i.PartitionNumber      , i.RowsCount      , i.IndexType      , i.IsAllowPageLocks      , u.TotalWrites      , u.TotalReads      , u.TotalSeeks      , u.TotalScans      , u.TotalLookups      , u.LastUsage      , i.DataCompression      , f.Fragmentation      , IndexStats       = STATS_DATE(i.ObjectID, i.IndexID)      , IsLobLegacy      = ISNULL(lob.IsLobLegacy, 0)      , IsLob            = ISNULL(lob.IsLob, 0)      , IsSparse         = CAST(CASE WHEN p.ObjectID IS NULL THEN 0 ELSE 1 END AS BIT)      , IsPartitioned    = CAST(CASE WHEN dds.[data_space_id] IS NOT NULL THEN 1 ELSE 0 END AS BIT)      , FileGroupName    = fg.[name]      , i.IsUnique      , i.IsPK      , i.FillFactorValue      , i.IsFiltered      , a.IndexColumns      , a.IncludedColumns FROM #Indexes i JOIN sys.objects o WITH(NOLOCK) ON o.[object_id] = i.ObjectID JOIN sys.schemas s WITH(NOLOCK) ON s.[schema_id] = o.[schema_id] LEFT JOIN #AggColumns a ON a.ObjectID = i.ObjectID AND a.IndexID = i.IndexID LEFT JOIN #Sparse p ON p.ObjectID = i.ObjectID LEFT JOIN #Fragmentation f ON f.ObjectID = i.ObjectID AND f.IndexID = i.IndexID AND f.PartitionNumber = i.PartitionNumber LEFT JOIN (     SELECT ObjectID      = [object_id]          , IndexID       = [index_id]          , TotalWrites   = NULLIF([user_updates], 0)          , TotalReads    = NULLIF([user_seeks] + [user_scans] + [user_lookups], 0)          , TotalSeeks    = NULLIF([user_seeks], 0)          , TotalScans    = NULLIF([user_scans], 0)          , TotalLookups  = NULLIF([user_lookups], 0)          , LastUsage     = (                                 SELECT MAX(dt)                                 FROM (                                     VALUES ([last_user_seek])                                          , ([last_user_scan])                                          , ([last_user_lookup])                                          , ([last_user_update])                                 ) t(dt)                            )     FROM sys.dm_db_index_usage_stats WITH(NOLOCK)     WHERE [database_id] = @DBID ) u ON i.ObjectID = u.ObjectID AND i.IndexID = u.IndexID LEFT JOIN #Lob lob ON lob.ObjectID = i.ObjectID AND lob.IndexID = i.IndexID LEFT JOIN sys.destination_data_spaces dds WITH(NOLOCK) ON i.DataSpaceID = dds.[partition_scheme_id] AND i.PartitionNumber = dds.[destination_id] JOIN sys.filegroups fg WITH(NOLOCK) ON ISNULL(dds.[data_space_id], i.DataSpaceID) = fg.[data_space_id]  WHERE o.[type] IN ('V', 'U')     AND (             f.Fragmentation >= @Fragmentation         OR             i.PagesCount > @PreDescribeSize         OR             i.IndexType IN (5, 6)     ) 

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

После выполнения вышеуказанного скрипта появится окно с таблицей индексов:

Также здесь можно вывести и другую детальную информацию, такую как:

  1. база данных
  2. количество секций
  3. дата и время последнего обращения
  4. сжатие
  5. файловая группа

и т. д.
Сами колонки можно настраивать:

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

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

С помощью главного меню можно как сохранить скрипт (эта же кнопка запускает сам процесс оптимизации индексов):

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

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

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

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

Помимо всего вышеописанного в главном меню есть строка поиска:

При запуске процесса оптимизации индексов:

Также внизу окна можно просмотреть лог выполняемых действий:

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

Пожелания к приложению:

  1. сделать возможным выборочно обновлять статистики не только для индексов и также разными способами (полностью обновлять или частично)
  2. сделать возможным не только выбирать БД, но и разные сервера (это очень удобно, когда много экземпляров MS SQL Server)
  3. для большей гибкости в использовании предлагается обернуть команды в библиотеки, и вывести в команды PowerShell, как это сделано, например, здесь:
  4. dbatools.io/commands
  5. сделать возможным сохранять и изменять персональные настройки как для всего приложения, так и в случае необходимости для каждого экземпляра MS SQL Server и каждой базы данных
  6. из п.2 и 4 вытекает пожелание сделать группы по базам данных и группы по экземплярам MS SQL Server, для которых настройки одинаковые
  7. сделать поиск дубликатов индексов (полных и неполных, которые либо несильно отличаются, либо отличаются только по включенным колонкам)
  8. т к SQLIndexManager используется только для СУБД MS SQL Server, то необходимо отразить это в названии, например, следующим образом: SQLIndexManager for MS SQL Server
  9. все части приложения не GUI вынести в отдельные модули и переписать на .NET Core 2.1

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

Источники


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