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

Анализ

Самый беззащитный уже не Сапсан. Всё оказалось куда хуже

13.01.2021 10:12:44 | Автор: admin
Больше года назад хабравчанин keklick1337 опубликовал свой единственный пост Самый беззащитный это Сапсан в котором рассказывает как он без серьёзных ухищрений получил доступ ко внутренней сети РЖД через WiFi Сапсана.

В ОАО РЖДпрокомментировали результатыэтого расследования. Есть результаты проверки. Почему удалось взломать? Наверное, потому, что злоумышленник. Наверное, из-за этого Ну, он из фана. Юный натуралист. Там уязвимостей, которые бы влияли на утечку каких-то критических данных, нет. Мультимедийный портал Сапсанов функционирует как положено и не нуждается в доработке, заявил Евгений Чаркин.

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

К сожалению, но специалисты РЖД, начиная с директора по информационным технологиям, отнеслись к статье очень пренебрежительно, проигнорировав важное указание автора:
Также оттуда в сеть РЖД есть впн. Если захотите найдёте её там сами.

И вот, год спустя я попал в сеть РЖД даже не садясь в Сапсан.


Видимо, только этот котэ добросовестно охраняет вокзал.

Как именно я попал в сеть РЖД с пруфами, чего не сделал директор по информационным технологиям ОАО РЖД Чаркин Евгений Игоревич и возможные последствия под катом.

Всё началось с гипотезы


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

Таким образом меня посетила идея проверить гипотезу: Есть ли жизнь за прокси?

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

Запустил сканер через него по адресам 172.16.0.0/12 порт 8291 (mikrotik winbox). И! Я его нашёл! Без пароля!



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

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

В поисках Немо владельца системы


Так как я придерживаюсь принципов Grey hat (Обо мне mysterious Russian-speaking grey-hat hacker Alexey и статья на Хабре) и съел собаку на безопасности Mikrotik, то я принялся искать владельца системы, чтобы связаться с ним.

Кстати, заходите в Телеграм чат RouterOS Security t.me/router_os

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

За интерфейсами ether1 и bridge ничего интересного не обнаружил. Найденные камеры были абсолютно не информативными.



А вот сканирование vpn, отмеченные красным на скрине выше, выдало более 20 000 устройств
Причём более 1000 штук микротики. Огромное количество устройств с заводскими паролями.

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

1. Камеры наружного наблюдения подавляющее большинство.



Ещё камеры






Даже офисы внутри



Камер, по скромным ощущениям, не менее 10 000 штук. Производители разные: beward, axis, panasonic и т.д.

2. Ip-телефоны и FreePBX сервера также большое количество.




3. IPMI серверов:

Asus

Dell (их подавляющее большинство)


Supermicro

Из серверов виртуализации встречаются ESXi, Proxmox и oVirt



Много узлов кластера Proxmox (по поднятым сервисам и трафиком между ними.)

4. Преобразователи ethernet во 'что угодно' (Moxa UniPing etc)


5. Системы управления ИБП



6. Внутренние сервисы





Что-то похожее на мониторинг состояния систем обеспечения здания.


Система управления кондиционированием и вентиляцией


Различные системы управления табло на перронах :-)

Эта самая красивая


Некий терминал, но внутри модифицированный дебиан.

Таких нашёл около 20


Кстати, аптайм у него почти год:




6. Сетевое оборудование



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

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

Не полный кусок лога по прокси.



Такое ощущение, что интегратор, который строил сеть, специально оставил этот доступ.

И все же кто же хозяин?


Думаю, что уже все и так догадались.

Это я пробежался по верхушкам в рандомном порядке. Потратил я на это чуть больше 20 минут, чем автор статьи про Сапсан.

Это здец. Сеть просто в решето.

Причём это устройства по всей РФ.

Например, вот это вокзал Уфы

Антропово Костромской области


Развёрнута профессиональная система видеонаблюдения.

Нашёл презентацию по вокзалам.

macroscop


Находил Кемерово, Новосибирск, Омск и т.д. По внешнему виду вокзалы сложно определить. К тому же я поездом уже лет 5 не ездил.

Как же так получилось?


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



То есть это один из шлюзов в мир из сети РЖД. Ну и в сеть РЖД тоже

Получилась вот такая картина:

  1. Вероятно, что это один из офисов РЖД, который прилинкован к основой сети через l2tp.
  2. Я попадаю в сеть где межсетевые экраны отсутствуют как класс.
  3. Запускаю интенсивное сканирование хостов у меня соединение не рвётся. Значит о системах обнаружения вторжения (IDS/IPS) РЖД тоже ничего не слышал. Микротик может замечательно интегрироваться, например Suricata
  4. Обнаружил кучу устройств без защиты. Это говорит, что службы сетевой безопасности в РЖД так же нет.
  5. Много устройств с дефолтными паролями. То есть политики паролей тоже нет.
  6. С Микротиков внутри сети я легко поднял туннели. То есть исходящий трафик не контролируется.
  7. Я вижу все интерфейсы управления в одной сети с клиентскими сервисами. Админы РЖД ничего не знают о Management VLAN

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

Так дайте ответ, Евгений Игоревич, какой Юный натуралист проводил расследование и не заметил гнездо со слонами?



У меня лично есть всего три варианта ответа на этот вопрос:

1. У Вас исходно плохая команда.

Проверку проводил тот же отдел, который и проектировал/обслуживает систему. Отрицая проблему, они или сохраняют свою работу, или преследуют иные цели.



2. Вы доверились не тому специалисту. Аудит проводил некомпетентный сотрудник.



3. Вы и так знаете о проблеме, но по каким-то неведомым причинам не можете ее публично признать и решить.



Стоимость уязвимости


Что есть защищенная система? Защищенная система это та система, взлом которой стоит дороже, чем ценность информации, которая там есть. Вот и все, подытожил директор по информационным технологиям ОАО РЖД.

Предлагаю применить Вашу систему оценки в теории на примере системы видеонаблюдения РЖД.

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

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



А закупки по 44-ФЗ отличаются, как непредсказуемой конечной стоимостью, так и временем проведения самой процедуры и получения продукта. Я потратил 8 часов для сбора информации для этой статьи. Найдено ~10к камер. Производителей камер, которые установлены, немного максимум штук 10.

Гипотетическому злоумышленнику потребуется:

  1. Модифицировать прошивки, заблокировав сетевой порт на 10 прошивках. Думаю, что на это у специалиста уйдёт три рабочих дня;
  2. ННаписать сканер, который будет анализировать устройство и заливать соответствующую прошивку. Заложим ещё 2 дня;
  3. Запустить этот сканер-прошивальщик, чтобы не смогли найти источник и заблокировать часа два.

Таким образом за неделю работы специалиста по взлому РЖД потеряет минимум 130 миллионов рублей. Отсюда стоимость одного часа работы злоумышленника будет равна ~2,5 млн. рублей.

Двигаемся дальше.

Быстро заменить камеры на работающие РЖД не сможет. В резерве столько нет. Купить новые из-за обязанности объявления торгов так же не получится. Таким образом вся железная дорога будет без видеонаблюдения не меньше месяца.

А вот это уже опасность террористической угрозы. Чтобы её хоть как-то снизить потребуется на 10 тысячах объектов существенно усилить охрану. То есть даже на маленькую ж.д. станцию потребуется дополнительно 6 человек охраны

Кажется счёт уже уходит за миллиарды

Что нужно изменить, чтобы снизить вероятность возможных последствий?


Далее чисто мой взгляд на решение данной ситуации. Он ничего общего не имеет с мировыми best practices.

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

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

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

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

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

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

4. После сдачи проектов провести аудит безопасности инфраструктуры.

5. По окончанию пентестов своими силами объявить Bug Bounty

Чтобы мотивировать аудиторов и внутренних специалистов работать качественно, надо объявить лимит на количество и серьёзность уязвимостей, которые могу найти участники программы Bug Bounty. Если внешние специалисты найдут багов меньше лимита, то свои аудиторы получают премии. Если багов будет больше лимита, то штрафовать.

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

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

Заключение


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

Например, вот эти линки я уже встречал не раз на роутерах, никак не относящихся к РЖД.



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

В случае с Сапасаном, чтобы через полученный VPN доступ можно было увидеть только один сервис с которым взаимодействует пользователь системы, а не всю сеть РЖД

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

Связаться со мной можно через телеграм t.me/monoceros
Обсудить данную статью приглашаю в профильный чат по Микротикам в Телеграм RouterOS Security: t.me/router_os

Кстати, Евгений Игоревич, с повышением!



Источник

Подробнее..

Как машинное обучение и TensorFlow помогают готовить гибридную выпечку хобби-кейс разработчика Google

10.02.2021 14:12:50 | Автор: admin

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

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

От набора данных до кухонного стола


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


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

Этими ингредиентами оказались:

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

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


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

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


Пример кода, модель и работающий сервис


Что касается TensorFlow модели, то код достаточно короткий. Для модели использовался Keras API.

model = tf.keras.Sequential([  tf.keras.layers.Dense(16, input_shape=(num_ingredients,)),  tf.keras.layers.Dense(16, activation='relu'),  tf.keras.layers.Dense(3, activation='softmax')                ])

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

def get_prediction(request):     data = request.get_json()    prescaled = dict(zip(columns, data))    scaled = scale_data(prescaled)        # Send scaled inputs to the model    prediction = predict_json('gcp-project-name', 'baking', scaled)        # Get the item with the highest confidence prediction    predicted_ind = np.argmax(prediction)    label_map = ['Bread', 'Cake', 'Cookies']    baked_prediction = label_map[predicted_ind]    confidence = str(round(prediction[predicted_ind] * 100))     if baked_prediction == 'Bread':        emoji = "It's bread! "    elif baked_prediction == 'Cake':        emoji = "It's cake! 
Подробнее..

GOMS-анализ юзабилити интерфейса

28.07.2020 12:21:05 | Автор: admin
image

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

Быстрый ответ на вопрос стоит ли использовать GOMS-анализ для проверки юзабилити: Если вы проектируете интерфейс, при работе с которым от задержки в 0,3 сек. никто не умирает не стоит..

Итак, The model of Goals, Objects, Methods, and Selection rules (GOMS) это метод исследования интерфейса, разработанный Кардом, Мораном и Ньюэллом в 80-х годах. GOMS позволяет предсказать, сколько времени потребуется опытному (именно опытному) пользователю на выполнение конкретной операции при использовании конкретного интерфейса.

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

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

Жесты и время по модели GOMS:


  1. H (перенос руки на мышь) = 0,4 сек
  2. К (нажатие клавиши клавиатуры или мыши) = 0,2 сек
  3. Р (перенос курсора к позиции на экране) = 1,1 сек
  4. М (обдумывание следующего шага) = 1,35 сек
  5. R (ожидание ответа системы) время зависит от быстродействия конкретной системы и не участвует в расчётах.


В дальнейших расчётах Жесты будут заменяться буквенными обозначениями из списка выше и будут называться Операторы.

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

Правила расстановки операторов:


  • Правило 0. Начальная расстановка операторов M
    Операторы M надо ставить перед всеми операторами K (нажатие клавиши), а также перед всеми операторами P (указание с помощью мыши), предназначенными для выбора команд (например, указание на выпадающий список); но перед операторами P, предназначенными для указания на аргументы этих команд (например, конкретный пункт в выпавшем списке), ставить оператор M не надо.
  • Правило 1. Удаление ожидаемых операторов M
    Если оператор, следующий за оператором M, является полностью ожидаемым с точки зрения оператора, предшествующего M, то этот оператор M может быть удален. Например, если вы перемещаете мышь чтобы нажать кнопку по достижении цели, то в соответствии с этим правилом следует удалить оператор M, устанавливаемый по правилу 0.
  • Правило 2. Удаление операторов M внутри когнитивных единиц
    Если строка вида M K M K M K принадлежит когнитивной единице, то следует удалить все операторы M, кроме первого. Когнитивной единицей является непрерывная последовательность вводимых символов, например 4564.23 или Константин Константинопольский.
  • Правило 3. Удаление операторов M перед последовательными разделителями
    Если оператор K означает разделитель, стоящий в конце когнитивной единицы (например, тире между двумя днями понедельник четверг), то следует удалить оператор M, стоящий перед ним.
  • Правило 4. Удаление операторов M, которые являются прерывателями команд
    Если оператор K является разделителем, стоящим после постоянной строки (например, точка в конце предложения, которая каждый раз вводится в неизменном виде), то следует удалить оператор M, стоящий перед ним. Добавление разделителя станет привычным действием, и поэтому разделитель станет частью строки и не будет требовать специального оператора M. Но если оператор K является разделителем для строки аргументов или любой другой изменяемой строки, то оператор M следует сохранить перед ним.
  • Правило 5. Удаление перекрывающих операторов M
    Любую часть оператора M, которая перекрывает оператор R, означающий задержку, связанную с ожиданием ответа компьютера, учитывать не следует.


Применение метода


Дано:
Юзера просят перевести температуру из Фаренгейта в Цельсий или наоборот. Например, могут попросить: Переведи, 3,5 градуса по Фаренгейту в градусы по Цельсию. Значение температуры юзер может ввести только с помощью клавиатуры или мыши.

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

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

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

Решение. Вариант 1


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



Расчёт:


Н (руку на мышь) + М (думаем) + Р (ведём курсор к радио-группе) + К (клик) + М (думаем) + Р (курсор к полю) + К (клик) + Н (перенос руки с мыши на клаву) + М (думаем) + К (ввод первой цифры) + М (думаем) + К (ввод второй цифры).

По правилу 2, удаляем лишние М и получаем:
Н + М + Р + К + М + Р + К + Н + М + К + К

Если выбрано НЕ подходящее направление конвертации температур, то получаем:
0,4 + 1,35 + 1,1 + 0,2 + 1,35 + 1,1 + 0,2 + 0,4 + 1,35 + 0,2 + 0,2 = 7,85 сек

Если выбрано подходящее направление конвертации температур, то получаем:
0,4 + 1,35 + 1,1 + 0,2 + 1,35 + 0,2 + 0,2 = 4,8 сек

Решение. Вариант 2


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



Расчёт:


Н (0,4) + М (1,35) + Р (1,1) + К (0,2) + Р (1,1) = 4,15 сек

Этот вариант реализации юзабельней первого на 0,65 сек.

Погрешность метода


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

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

Моё мнение о GOMS анализе


Когда я только узнал о нём мне захотелось немедленно начать его использовать во всех своих проектах. Мне казалось, что вот оно избавление от извечных мук выбора как правильней. Без субъективщины и трендов. Реальная тупая математика. Но на деле, чтобы описать даже самый примитивный интерфейс, надо потратить раза в два больше времени чем на его проектирование. А потом всё равно придётся спроектировать альтернативный вариант чтобы посчитать и его. И даже если в итоге я узнаю какой вариант лучше, окажется, что он лучше на 0,65 сек. Потратить 34 часа чтобы выиграть 0,65 сек это мощно.
Тем не менее я, считаю, что метод всё равно классный и его стоит использовать, но в каких-то супер важных интерфейсах в которых даже 0,65 сек имеют значение. В большинстве же проектов логичней положиться на свой опыт и постфактум просто спросить юзеров, как им удобнее.

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


P. S.


Существуют и модификации GOMS анализа. Например, Сritical-path method GOMS (CPM-GOMS) и версия, называемая естественным языком GOMS (natural GOMS language, NGOMSL) в которой учитывается поведение неопытного пользователя, например время, необходимое ему для обучения. Об этих версиях вы можете прочитать самостоятельно.
Подробнее..

Квеструм по ашановски (ux)

21.01.2021 00:20:21 | Автор: admin

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

обобщенный вариант оформленияобобщенный вариант оформления

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

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

1. Проблемы

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



Порядок при первом использовании

- Понять что нужно делать
- Найти сканер или нечто похожее
- Отсканировать чек с qr-кодом
- Найти куда вносить купюры
- Внести купюры
- Найти куда вносить монеты
- Внести монеты
- Найти откуда брать сдачу
- Взять сдачу
- Найти откуда брать чек
- Взять чек об оплате (а почему их два?)
- Понять какой чек нужен на выходе
- Выйти

Ура! так выглядел обыденный процесс покупки пакета молока после работы.

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


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

2. Проблемы оформления

  • На кислотном красном нормально читаться будет только белый

  • Белые подложки усиливают общую контрастность, выделяя все и не выделяя ничего

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

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

  • Инструкция на мониторе показывает схематически неправильный терминал,
    несуществующий штрих-код, и указывает на несуществующий сканер

3. Возможное решение


Меньше шума, больше информации

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

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

два варианта оформления (темные области слепые зоны при виде сверху)два варианта оформления (темные области слепые зоны при виде сверху)

Направляющие и подсказки


Второй по важности этап оплата.

Добавим акцент на купюроприёмник,
но гораздо слабее, чем на чек.

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


Добавим стрелку к оплате монетами. Этот этап происходит одновременно с оплатой купюрами,
но менее важен.

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


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

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

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



такое оформление не требует никаких технических изменений

"Это решение уже завтра можно напечатать на плёнке и расклеить на каждый терминал"

4. Варианты без привязки к цвету корпуса


Белый вариант

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


Зеленый вариант

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


















можно придумать еще несколько вариантов оформления цифр, чека, стрелок

(почти)Идеальные варианты в сферическом вакууме

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

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

Чек на выходе

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

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

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

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

Подробнее..

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

21.05.2021 12:08:14 | Автор: admin

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

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

Итак, начнем

А начнем мы с того, какую роль в ПК выполняет материнская плата. По сути, она служит для:

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

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

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

Почти все материнские платы для стандартных ПК имеют разъемы для центрального процессора (ЦП), модулей памяти (обычно типа DRAM), дополнительных плат расширения (таких как видеокарта), устройств хранения, блоков ввода/вывода, а также средств связи с другими компьютерами и системами.

Существуют отраслевые стандарты по размерам материнских плат, которых придерживаются одни производители и не придерживаются другие (но их гораздо меньше). Вот основные из них:

  • Standard ATX 12 9,6 дюйма (305 244 мм);

  • Micro ATX 9,6 9,6 дюйма (244 244 мм);

  • Mini ATX 5,9 5,9 дюйма (150 150 мм).

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

Но что же такое материнская плата?

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

Начнем разбор с типичной материнской платы ATX. Ниже изображена плата Asus Z97-Pro Gamer, внешне и функционально не сильно отличающаяся от десятков ей подобных.

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

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

Подключаем мозг к ПК

На схеме выше мы видим структуру, имеющую обозначение LGA1150. Это обозначение используется в Intel для разъема, предназначенного для подключения различных процессоров. LGA здесь означает Land Grid Array распространенный тип технологии упаковки центральных процессоров и других чипов.

Системы LGA имеют множество маленьких контактов на материнской плате или в разъеме для обеспечения питания и связи с процессором. Выглядят они так:

Металлический фиксатор помогает закрепить ЦП на месте, но мешает рассмотреть контакты, так что уберем его:

Помните, что это? LGA1150. 1150 здесь указывает на количество выводов в разъеме, и у других материнских плат оно может отличаться. Чем выше производительность ЦП (с точки зрения количества ядер, объема кэш-памяти и т. д.), тем больше контактов будет в разъеме. Большая их часть используется для обмена данными со следующей важной частью материнской планы.

Большому мозгу большая память

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

В нашем примере ЦП в материнской плате имеет 2 контроллера памяти, каждый из которых оперирует 2 картами памяти, всего 4 слота DRAM. На материнской плате они окрашены так, чтобы вы знали, какие из них каким контроллером управляются. Обычно их называют каналами памяти.

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

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

При такой комбинации ЦП и материнской платы используются микросхемы DDR3 SDRAM (синхронная динамическая память с произвольным доступом с версией 3 двойной скорости передачи данных), и каждый слот может содержать один SIMM или DIMM. IMM обозначает X-рядный модуль памяти (In-line Memory Module); S и D указывают на то, заполнена ли чипами одна или две стороны модуля (Single или Dual, соответственно).

Вдоль нижнего края модуля памяти располагаются позолоченные разъемы для питания и обмена данными. Всего их у этого типа памяти 240 по 120 с каждой стороны.

Одинарный модуль DIMM DDR3 SDRAMОдинарный модуль DIMM DDR3 SDRAM

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

Обычно производители придерживаются 240 контактов в модулях памяти, и нет никаких признаков того, что в ближайшее время это изменится. Чтобы улучшить производительность памяти, с каждой новой версией просто увеличивается скорость чипов. В нашем примере каждый из контроллеров памяти ЦП может отправлять и получать 64 бита данных за такт. Таким образом, с двумя контроллерами карты памяти будут иметь 128 контактов, предназначенных для обмена данными. Так почему же их именно 240?

Каждый чип в DIMM (всего их 16 по 8 на каждую сторону) может передавать 8 бит за такт. Это означает, что каждому чипу требуется 8 контактов только для передачи данных; однако пара чипов использует одни и те же выводы, поэтому только 64 из 240 отвечают за обмен данными. Остальные 176 контактов необходимы для синхронизации и передачи адресов данных (места расположения данных в модуле), управления микросхемами и обеспечения их электроэнергией. Так вы можете убедиться, что наличие более 240 контактов не обязательно улучшит ситуацию.

ОЗУ не единственное, что подключено к процессору

Для повышения производительности системная память подключена напрямую к центральному процессору, но на материнской плате есть и другие разъемы, подключенные примерно так же и в тех же целях. Они используют технологию подключения PCI Express (сокращенно PCIe), и каждый современный ЦП имеет встроенный контроллер PCIe.

Эти контроллеры могут обрабатывать несколько соединений (обычно называемых линиями), даже несмотря на то, что это система точка-точка что означает, что линии в разъеме не используются совместно с каким-либо другим устройством. В нашем примере контроллер PCI Express имеет 16 линий.

На изображении ниже показаны 3 разъема: два верхних это PCI Express, нижний гораздо более старая система под названием PCI (родственная PCIe, но намного медленнее). Маленький слот сверху, обозначенный как PCIEX1_1, имеет одну линию; тот, что ниже, 16 линий.

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

  • 2 разъема PCI Express на 1 линию;

  • 3 разъема PCI Express на 16 линий;

  • 2 разъема PCI.

Но если у контроллера ЦП всего 16 линий, то что тогда происходит? Прежде всего, к процессору подключены только PCIEX16_1 и PCIEX16_2, а третий и два однолинейных подключены к другому процессору на материнской плате (подробнее об этом чуть позже). Кроме того, если задействованы оба разъема на 16 линий PCIe, ЦП выделит каждому только по 8 линий. Это типично для всех современных процессоров: количество линий у них ограничено, и по мере того, как к ЦП подключается все больше устройств, на каждое выделяется все меньшее число линий.

Различные конфигурации процессора и материнской платы имеют собственные способы решения этой проблемы. Например, материнская плата Gigabyte B450M Gaming имеет один разъем PCIe на 16 линий, один PCIe на 4 линии и один M.2, использующий 4 линии PCIe. Поскольку ЦП имеет всего 16 линий, использование любых двух разъемов одновременно приведет к тому, что самый большой слот, 16-тилинейный, будет ограничен всего до 8 линий.

Так что же использует такие разъемы? Наиболее распространенные варианты:

  • 16 линии видеокарта;

  • 4 линии твердотельные накопители (SSD);

  • 1 линия звуковые карты и сетевые адаптеры.

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

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

Теперь двинемся через мост на юг

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

На фото выше показана материнская плата ASRock 939SLI32, где четко видны микросхемы NB и SB. Они обе скрыты под алюминиевыми радиаторами, но ближайшая к разъему ЦП в середине изображения это и есть северный мост. Спустя несколько лет после выхода этой платы и Intel, и AMD откажутся от использования NB и выпустят продукты, в которых NB интегрирован в ЦП. Южный мост, однако, остается отдельным, и, скорее всего, это не изменится в обозримом будущем. Интересно, что оба производителя процессоров перестали называть его SB и теперь часто зовут его просто чипсетом (собственное название Intel PCH, блок контроллеров платформы) несмотря на то, что это один чип.

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

Этот чип представляет собой усовершенствованный контроллер, поддерживающий разные типы и количество подключений. В частности, у нас есть Intel Z97, выполняющий следующие функции:

  • 8 линий PCI Express (версия 2.0 PCIe);

  • 14 портов USB (6 для версии 3.0, 8 для версии 2.0);

  • 6 портов Serial ATA (версия 3.0).

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

В данном случае это процессор, обрабатывающий слоты PCIe с одной линией, третий слот с 16 линиями и слот M.2. Как и многие новые чипсеты, он обрабатывает все эти различные соединения с помощью набора высокоскоростных портов, которые можно переключить на PCI Express, USB, SATA или сетевое соединение, в зависимости от того, что подключено в данный момент. Это, к сожалению, накладывает ограничение на количество устройств, подключенных к материнской плате, несмотря на наличие всех этих разъемов.

В случае нашей материнской платы Asus порты SATA (используемые для подключения жестких дисков, DVD-приводов и т. д.) из-за этого ограничения сгруппированы так, как показано выше. Блок из 4 портов посередине использует стандартные USB-соединения чипсета, тогда как два слева используются некоторые из этих высокоскоростных соединений. Так что, если вы используете те, что слева, на чипсете будет меньше соединений для других разъемов. То же самое и с портами USB 3.0. В них есть поддержка до 6 устройств, но 2 порта обязательно будут подключены к высокоскоростным соединениям.

Разъем M.2, используемый для подключения SSD-накопителя, также использует быструю систему (вместе с третьим слотом PCI Express на 16 линий на этой материнской плате); однако в некоторых комбинациях ЦП и материнской платы разъемы M.2 подключаются непосредственно к ЦП, поскольку многие новые продукты имеют более 16 линий PCIe.

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

  • Разъем PS/2 для клавиатур и мышей (сверху слева);

  • Разъем VGA для недорогих и устаревших мониторов (сверху посередине);

  • Порты USB 2.0 черные (снизу слева);

  • Порты USB 3.0 синие (снизу посередине).

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

Дополнительные фишки для дополнительной помощи

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

Рассматриваемая нами материнская плата Asus не исключение. Например, микросхема Nuvoton NCT6791D обрабатывает все маленькие разъемы для кулеров и датчики температуры на плате. Расположенный рядом процессор Asmedia ASM1083 управляет двумя устаревшими разъемами PCI, поскольку у чипа Intel Z97 такой возможности нет.

Хоть у чипсета Intel и есть встроенный сетевой адаптер, но он нагружает столь драгоценные высокоскоростные соединения, поэтому Asus добавила еще один чип Intel (I218V) для управления красным разъемом Ethernet, который мы видели в блоке ввода/вывода. На изображении выше не видно, насколько мал этот чип: его площадь составляет всего 0,24 дюйма (6 мм).

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

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

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

Эти маленькие микросхемы представляют собой переключатели PCI Express и помогают процессору и южному мосту управлять 16-линейными разъемами PCIe, когда им необходимо распределить полосы между несколькими устройствами.

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

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

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

Этот чип Winbond имеет объем памяти всего 8 МБ, но этого более чем достаточно для хранения всего необходимого ПО. Этот вид флэш-памяти имеет очень малое энергопотребление при использовании и надежно хранит данные в течение десятилетий.

При включении ПК содержимое флэш-памяти копируется непосредственно в кэш ЦП или системную память, а затем запускается оттуда. Единственное, с чем это не сработает, это время.

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

Кстати о питании для него тоже есть отдельные разъемы.

Игорь, принеси мне питание!

Чтобы обеспечить материнскую плату и подключенные к ней устройства необходимым напряжением, блок питания (PSU) имеет ряд стандартных разъемов. Основной из них 24-контактный разъем ATX12V версии 2.4.

Величина тока зависит от блока питания, но промышленные стандарты напряжения составляют +3,3, +5 и +12 В.

Основная часть питания ЦП поступает от 12-вольтных контактов, но для современных высокопроизводительных систем этого недостаточно. Чтобы обойти эту проблему, существует дополнительный 8-контактный разъем питания, обеспечивающий еще четыре 12-вольтных линии.

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

Линии +3,3, +5 и +12 В подают питание на различные компоненты на самой материнской плате, а также ЦП, DRAM и любые устройства, подключенные к разъемам, таким как USB-порты или PCI Express. Однако все, что использует порты SATA, требует питания непосредственно от блока питания, а разъемы PCI Express могут обеспечить напряжение только до 75 Вт. Если устройству требуется больше энергии, например, как многим видеокартам, то их также необходимо подключить напрямую к блоку питания.

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

Например, процессоры Intel, совместимые в нашей материнской платой Asus Z97, работают с напряжением от 0,7 до 1,4 В. Это не фиксированное напряжение, поскольку современные процессоры меняют его для экономии энергии и уменьшения нагрева, и в спящем режиме процессор может потреблять менее 0,8 В. Затем, когда все ядра полностью загрузятся и начнут свою работу, оно возрастает до 1,4 В и более.

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

Каждый VRM обычно состоит из 4 компонентов:

  • 2 MOSFET сильноточные управляющие транзисторы (синие);

  • 1 дроссель (фиолетовый);

  • 1 конденсатор (желтый).

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

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

Даже стандартный настольный процессор, такой как Intel i7-9700K, может потреблять ток более 100 А при полной загрузке. VRM очень эффективны, но они не могут изменять напряжение без потерь. Принимая во внимание большой ток потребления, вы получаете отличное устройство для гриля.

Если снова взглянуть на фотографию нашей платы, можно увидеть пару VRM для модулей DRAM, но, поскольку напряжения там гораздо меньше, чем на ЦП, они не так сильно нагреваются (и поэтому радиатор не нужен).

И прочие назойливые мелочи

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

Здесь у нас есть:

  • 1 мягкий выключатель питания;

  • 1 кнопка сброса;

  • 2 светодиодных разъема;

  • 1 разъем для динамика.

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

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

Большинство материнских плат имеет аналогичный набор дополнительных разъемов, как показано выше слева направо:

  • Разъем аудиопанели если в корпус ПК встроены разъемы для наушников/микрофона, то их можно подключить к встроенному звуковому чипу;

  • Цифровой аудиоразъем такой же, как и обычный аудиоразъем, но для S/PDIF;

  • Перемычка сброса BIOS позволяет сбросить BIOS до заводских настроек. Также за ним спрятан разъем термозонда;

  • Разъем Trusted Platform Module используется для повышения безопасности материнской платы и системы.

  • Разъем последовательного порта (COM) древний интерфейс. Кто-нибудь вообще им пользуется? Кто-нибудь?

Также наклеены, но не показаны, разъемы для кулеров и дополнительных USB-портов. Не каждая материнская плата поддерживает все это, но многие.

Соединяя все вместе

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

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

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

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

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

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

В заключение

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

Подробнее..

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

01.10.2020 18:11:51 | Автор: admin

Проектирование автоматизированной системы работы с дилерами





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

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

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

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

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

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

  • Что будет в личном кабинете дилера?
  • Просто заказы с документами и создание нового.

  • Действительно, просто. А откуда возьмутся заказы? Как сейчас они создаются? Возможно ли взаимодействие с этой системой через api? Кто сможет их создавать в нашей системе? А кто не сможет? Можно ли отменить? А если заказ уже отгружен? У кого будет доступ к заказу? А документы в какой момент и откуда возьмутся? А можно ли их выгрузить? Как будут меняться статусы? Будет ли кто-то контролировать выполнение заказа? С заказом могут быть рекламные материалы, говорите? А что за материалы, кто их создает, кто прикрепляет к заказу?

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

Исследование


Исследование предметной области

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

Наш клиент один из ведущих российских производителей материалов для строительства и отделки. Это предприятие полного цикла производства: от добычи гипсового камня (у компании собственная сырьевая база) до фасовки и упаковки готовой продукции. Поставки продукции компании осуществляются в более чем 100 городов России, а также в другие страны Европы и Азии. У компании примерно 150 дилеров, которые реализуют продукцию своей оптово-розничной сети. Ведется тщательная работа по привлечению и удержанию дилеров. Компания всячески поддерживает их в продвижении товаров, стимулирует продавать больше интересными маркетинговыми акциями и системой бонусов.

Интервью с заинтересованными лицами, постановка бизнес-целей

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



Такие проблемы нам были озвучены:

  • Вся работа с дилерами ведется по телефону и электронной почте. Заказ оформляется письмом на электронный адрес, обновления по нему обсуждаются в личном общении. Общение и оформление заказа ручной труд, который отнимает много времени сотрудников.
  • Нет актуальной информации о наличии товара на складе. Информация об остатках поступает менеджерам утром и не обновляется в течение дня. При формировании заказа нельзя точно сказать, доступно ли нужное количество товара.
  • У компании нет данных о деятельности дилеров: количестве товара на их складе, доле продукции компании в общем портфеле, популярности конкретных линеек товара, конечных покупателях и потребителях. Таким образом, нет возможности оптимально планировать отгрузки и маркетинговую деятельность.
  • Дилеры не получают полную информацию о сотрудничестве с компанией, теряют документы, не понимают, насколько выполнен план продаж, не знают о положенных им бонусах и подарках.
  • Анализ объемов продаж дилерам, остатки на их складах, планирование производства происходит в ручном виде аналитиком предприятия на основе догадок и предположений. Все данные собираются в один файл в формате excel, из него создаются отчеты.
  • Руководители отдела не получают точной информации о работе сотрудников своего отдела и не могут точно планировать их загрузку, ставить планы продаж.

Таким образом, целями работы стали:

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

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

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

На первой встрече с нашим заказчиком мы также:

1. Узнали, что:

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

2. Получили:

  • Договор партнерства,
  • Пример аналитического отчета об отгрузках,
  • Каталог продукции,
  • Рекламные материалы.

3. Познакомились с:

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

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

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

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

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

AS IS или описание существующих бизнес-процессов, выявление проблем, сбор пользовательских требований


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

Пример списка сотрудников для общения:

  • Генеральный директор;
  • Заместители директора (два человека);
  • Руководитель дивизиона (три человека);
  • Менеджер отдела продаж (три человека);
  • Руководитель отдела логистики;
  • Руководитель отдела маркетинга;
  • Главный бухгалтер;
  • Трейд-маркетолог;
  • Аналитик;
  • Дилер (три человека).

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

Пример описания текущей ситуации:

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

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

1. Названия и количество товаров, которые необходимы,
2. Свои реквизиты;
3. Адрес грузополучателя, куда необходимо отгрузить товар;
4. Транспорт, которым необходимо отправить товар;
5. Желаемую дату отгрузки.

Менеджер отдела продаж создает новый заказ для дилера в системе 1С:

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

После размещения заказа для него формируется заявка на транспорт, которая отправляется в отдел логистики.

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

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

На этом этапе аналитику важно содействие со стороны заказчика:

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



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

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

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

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

Полевые исследования


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



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

Технические особенности


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

Для работы личного кабинета нашего заказчика были необходимы каталог товаров и данные дилеров (контрагентов). Все это хранится в системе 1С: Предприятие. Структура каталога не оптимальна, использовать ее неудобно (интуитивно не понятно, в какой категории находится товар, а ведь дилеру теперь придется искать его самостоятельно), данные не всегда заполнены (нет описаний, перепутаны фасовки).

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

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

В результате этапа исследования у нас, как правило, есть:

1. Сформулированные руководством цели и задачи для создания личных кабинетов;

2. Общее понимание и детальное описание бизнес-процессов, которые будут автоматизированы в результате их создания;

3. Список пользовательских требований от каждого типа пользователей личного кабинета;

4. Список систем, с которыми будет необходимо взаимодействовать, их описание и технические данные.

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

Проектирование


TO BE или проектирование новых бизнес-процессов и пользовательских сценариев


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

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

Пользовательское требование руководителя дивизиона:

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

Возможные сценарии на основе этого требования:

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

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

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

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

Выделение минимального набора сценариев для запуска


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

Пример MVP:

Личные кабинеты:

  • Генерального директора,
  • Руководителя дивизиона,
  • Менеджера продаж,
  • Маркетолога (зачеркнуто),
  • Сотрудника отдела логистики (зачеркнуто),
  • Главного бухгалтера (зачеркнуто).

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

  • Установка плана продаж сотрудников,
  • Установка плана продаж по договору для дилеров,
  • Контроль статусов заказов (зачеркнуто),
  • Получение статистики продаж дивизиона по сотрудникам,
  • Получение статистики продаж дивизиона по дилерам,
  • Просмотр информации дилера.

Примеры сценариев дилера:

  • Просмотр условий работы с компанией, плана продаж,
  • Размещение заказа (зачеркнуто),
  • Просмотр статистики продаж за месяц,
  • Размещение заявления на получение маркетинговых материалов (зачеркнуто),
  • Участие в акции (зачеркнуто).

Функциональные требования


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

Пользовательское требование руководителя дивизиона:

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

Функциональные требования, которые из него вытекают:

1. Видеть общую информацию по отгрузкам дилерам своего дивизиона с возможностью множественного и одновременного выбора:

а) периода времени (неделя, месяц, год);

б) группы товаров (ССС, СЦС, ГСП, ПГП);

в) конкретного товара;

г) региона/города; конкретного менеджера;

д) конкретного дилера.

2. Устанавливать и менять план отгрузок на месяц для каждого менеджера дивизиона.

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

а) периода времени (неделя, месяц, год);

б) региона/города;

в) группы товаров (ССС, СЦС, ГСП, ПГП);

г) конкретного товара;

д) конкретного менеджера;

е) конкретного дилера.

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

а) периода времени (неделя, месяц, год);

б) группы товаров (ССС, СЦС, ГСП, ПГП);

в) конкретного товара;

г) региона/ города; конкретного менеджера;

д) конкретного дилера.

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

а) периода времени (неделя, месяц, год);

б) группы товаров (ССС, СЦС, ГСП, ПГП);

в) региона/города;

г) конкретного менеджера;

д) конкретного дилера.

6. Указывать, сколько дилеров предоставили информацию.

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

а) периода времени (неделя, месяц, год);

б) группы товаров (ССС, СЦС, ГСП, ПГП);

в) региона/дивизиона и города;

г) конкретного менеджера;

д) конкретного дилера.

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

а) общая;

б) не более 14 дней;

в) 15-30 дней;

г) 31-45 дней;

д) 46-60 дней;

е) больше 61 дня.

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

а) периода времени (неделя, месяц, год);

б) региона/города;

в) конкретного менеджера;

г) конкретного дилера.

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

а) периода времени (неделя, месяц, год);

б) группы товаров (ССС, СЦС, ГСП, ПГП);

в) конкретного товара;

г) региона/города;

д) типа транспорта;

е) конкретного менеджера;

ж) конкретного дилера.

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


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

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

Пример структуры кабинета дилера, * отмечена версия MVP:

1. Страница авторизации*

2. Рабочий стол*

3. Моя компания

а) Профиль*

б) Договор и дополнения*

в) Коммерческие условия*

г) О компании*

сотрудники*

склады*

территория работы*

контракты других производителей*

специализированные подразделения*

требования и преимущества*

д) Грузополучатели*

е) Объекты*

4. Каталог

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

б) Корзина

в) Оформление заказа

5. Заказы и платежи

а) Мои заказы

заказы

отгрузки

б) Мои платежи

в) Дебиторская задолженность

5. Продвижение

а) POS-материалы

б) Акции

в) Бонусы

6. Сдать отчет*

7. Помощь*

8. Настройки*

9. Контакты*

10. Уведомления*

а) Автоматические уведомления*

б) Сообщения*

в) Написать сообщение*

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

Вот так могут быть заданы права:

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

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

Структура данных всегда представлена в виде схемы:



Советы:

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




Прототип интерфейса


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



Техническое задание


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

Отрывок из технического задания:

3.1.1.1.1. Склады

Основная часть страница включает следующие элементы:

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

название (адрес) склада;

город, в котором расположен склад;

площадь склада (кв.м.);

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

дополнительная информация: текст с описанием склада.

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

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

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

название (адрес) склада (текстовая строка)*;

город склада (текстовая строка)*;

собственный склад (чекбокс)*;

площадь склада, м2 (число)*;

дополнительная информация (текстовое поле).

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

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

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

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

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

Подытожим


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

Наш заказчик получил:

1. Личный кабинет для дилеров компании с возможностями:

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

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

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

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

2. Личные кабинеты сотрудников компании с возможностями:

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

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

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

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

хранить и обрабатывать результаты маркетинговых акций

В результате работ по проектированию у участников проекта появилась возможность выбрать отвечающую всем требованиям технологию разработки (веб-технологии с использованием зарекомендовавших себя фреймворков), что позволило значительно (7-8 млн. рублей вместо 70 млн.) снизить стоимость разработки по сравнению с разработкой на основе известных программных продуктов, например SAP.
Подробнее..

Из песочницы Анализ проблем, а так же разработка АИС в складском учёте

01.11.2020 00:15:24 | Автор: admin
Я: Публикация будет посвящена, наверное, теме, которая была уже затерта до дыр. Но хотелось тоже внести лепту в развитие IT-направления и рассказать о проблемах связанных с такой областью, как складской учёт


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


Общие проблемы при внедрении и разработках информационных систем


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


Такими технологическими решениями, являются информационные системы.


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


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


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


  1. Малый уровень формализации процессов;
  2. Весомые изменения в структуре бизнес-процессов организации;
  3. Проблема с низкой квалификацией сотрудников;
  4. Трата больших ресурсов компании для привлечения сторонних специалистов для обучения штата сотрудников использованию ИС;
  5. Все общие сопротивление работников внедрению о информатизациях систем;
  6. Проблема современной технической оснащенности организации (компьютерные программы, компьютеры);

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


  1. Выбор среды для разработки ИС и дальнейшего его поддержания.
  2. Проблема выбора типа разрабатываемой информационной системы;
  3. Проблема неправильного анализа требований организации, которая приведет к некорректному пониманию потоков информации в организации.
  4. Проблема построения корректной функциональной модели, которая может привести к не правильному построению архитектуры ИС.
  5. Проблема обеспечения целостности и безопасности информации на предприятии.

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


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


Такие системы должны решать проблемы связанные с:


  1. Правильностью контроля складских остатков в реальном времени;
  2. Корректностью отслеживание движения товара;
  3. Точностью фиксация продаж;
  4. Отчетностью по работе сотрудников;
  5. Предупреждению о наличие товара на складе;
  6. Формированию бухгалтерских отчетов и документов для поставщиков;

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


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




Сопротивление, это процесс разрушение компании на пути изменение


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


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


Я: Наверно вы думаете, что стоило начать с проблемы, которая связана с разработкой? Мой ответ вам Это правильное начало. Ответ будут скоро, а для начала разберем сам процесс внедрения досконально.

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





---------------------------------------Рисунок 1---------------------------------------


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


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


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


  1. Интерес выгоды. Данная причина убеждает человека, что при изменениях он может потерять что-то ценное;
  2. Недопонимание и недостаток доверия. Из-за неэффективной коммуникации между сотрудниками и руководством возникает недопонимания значимости работы;
  3. Различная оценка ситуации. Персонал по-разному оценивает важность такой работы;
  4. Изменения на низком уровни готовности. Многие люди не понимают основ и предназначении информационных систем;
  5. Второстепенные причины: влияния коллег, усталость от изменений, неудачный опыт в области изменений.

Проблему сопротивления можно решить создав для рабочего персонала комфортные условия на момент изменения. Теперь рассмотрим более подробно способы преодоления сопротивление изменениям (рисунок 2).





---------------------------------------Рисунок 2---------------------------------------


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




Выбор правильной информационной системы, это путь к эффективной автоматизации


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

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


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


Классификация признаков ИС подразделяется (приведена примерная классификация):


  1. По уровню сложности;
  2. По признаку структурированности задач;
  3. По функциональности;
  4. По степени автоматизации;
  5. По концепции построения;
  6. По режиму работы.

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

  1. 1. Ручные ИС;
  2. Автоматизированные ИС;
  3. Автоматические ИС.

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


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


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

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




Вывод:


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

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

Подробнее..

Анализ WMS-систем для автоматизации бизнес-процессов

15.11.2020 18:09:06 | Автор: admin

Данная статья даст ответы на определенные вопросы связанные с WMS-системами: Что из себя представляют WMS-системы ?, Что такое ganther магический квадрант ?, Какие компании находятся в лидерах в сфере WMS-систем ? Какие приложения поставщиков входят в плоскость лидеров за 2020 год ?, Какие особенности предоставляют данные приложения ?, Какой вывод можно сделать исходя из представленных особенностей ?.


Источник квадранта https://www.gartner.com/doc/reprints?id=1-1YZ85K9P&ct=200506&st=sb

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



Падаем!

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


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


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

Далее стоит привести основные задачи и цели, которые преследуют WMS-системы.


Основными целями WMS-систем, являются:


  1. Увеличение скорости оборота товара;
  2. Активное управление складом;
  3. Получение информации о нахождение товара;
  4. Отслеживание и получение информации о поступающем товаре;
  5. Отслеживание товара с ограниченным сроком годности;
  6. Получение инструмента для эффективной обработки товара на складе;
  7. Оптимизация использования складских площадей.

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


Классификация у систем управления складом так же присутствует, и она имеет под капотом всего два поршня:


  1. Классификация по группам: системы с адресным хранением (используется в крупных компаниях) и системы без адресного хранения (соответственно, используется в малых компаниях);
  2. Классификация по размеру: системы начального уровня, коробочные системы, адаптивные системы, конфигурируемые системы.

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


Для анализа компаний предоставляющие системы управления складом, будет использоваться Магический квадрант от компании Gartner за 2020 год (странно было бы писать статью в 2020 году по материалу за 2019 год).


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




Падаем!

Gartner называет магическим квадрантом отчёт с анализом сегмента рынка, в который включает изображение с распределением поставщиков по указанным плоскостям. Для оценки используются прогрессивные шкалы полнота видения ось абсцисс (completeness of vision), и способность реализации (ability to execute) ось ординат.


Плоскости, на которые вносят поставщиков, являются:


  1. Лидеры (leaders) поставщики с положительными оценками в обе оси;
  2. Претенденты (сhallengers) поставщики с положительными оценками только по способности реализации;
  3. Провидцы (visionaries) поставщики с положительными оценками только по полноте видения;
  4. Нишевые игроки (niche players) поставщики с отрицательными оценками в обе оси.

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

Исходя из этого квадранта, теперь можно провести анализ предоставленных данных, а так же ответить на поставленные вопросы: Какие компании находятся в лидерах в сфере WMS-систем? Какие приложения предоставляют поставщики?, Какие особенности предоставляют данные приложения?.


Начнем с первого вопроса, и на нем долго останавливаться не будем, поскольку чуть выше было представлено подробное описание схемы квадранта и его составление. На основе этих знаний, мы с уверенностью можем выделить основных претендентов на лидирующие места под солнцем систем управления складом. Такими компаниями, являются: Blue Yonder (formerly JDA), Infor, Krber (formerly HighJump), Manhattan Associates, Oracle, SAP. Далее рассмотрим каждого поставщика и их WMS-системы по отдельности.




Начнем с Blue Yonder (formerly JDA), данная компания ранее известная под названием, как JDA, является крупнейшим поставщиком пакетов SCM (Управление цепями поставок). Данный пакет включает в себя решения в области: WMS, управление транспортированием, планирование цепочки поставок, мерчандайзинга, управление персоналом и планирование розничной торговли.


Основными продуктами данной компании, являются: Blue Yonder Warehouse Management, Blue Yonder Dispatcher WMS, Blue Yonder Supply Chain Planner, а так же недавно компания запустила совершенно новый проект для предоставления набора инструментов под названием Luminate.


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


Особенностями можно считать:


  1. Обеспечивает высокую наглядность и точное суточное планирование в сети комплексных поставок и сбыта;
  2. Поддерживает ряд различных рабочих процессов и производственных сред;
  3. Возможность отчетности на основе исключений;
  4. Обеспечивает моделирование что если;
  5. Предлагает отраслевые шаблоны, которые помогают заказчикам выбрать наиболее выгодное решение;
  6. Поддерживает бизнес-правила для капиталоемких отраслей промышленности;
  7. Поддерживает бизнес-правила интенсивного распределения, включая хранение, обработку ограничений, инвентаризацию целевых брендов, возможности перевалки и транспортировки;
  8. Рассчитывает доходы и расходы по всей цепочке поставок;



Следующей компанией будет Infor одни из крупнейших поставщиков бизнес-приложений. Продукты Infor SCM варьируются от приложений для планирования цепочек поставок до управления цепочками поставок, включая складирование, управление персоналом, биллинг и транспортировку. Основным продуктом на сегодняшний день можно считать Infor CloudSuite WMS, которая не является полноценной WMS- системой, но в ее архитектуре имеется компонент (расширение) для управления складом. Данное приложение специализируется на управление ресурсами среднемасштабных промышленных предприятий. Infor CloudSuite так же автоматизирует управление запасами и закупками, планирование потребностей в сырье и материалах, прогнозирование производственных мощностей, обслуживание клиентов и обработку заказов.


Можно выделить некоторые особенности данного приложения:


  1. Обеспечивает полную и надежную функциональность всех процессов промышленного предприятия различных типов производства;
  2. Позволяет быстро и точно спланировать загрузку оборудования, трудозатраты и потребности в сырье, необходимые для производства продукции;
  3. Позволяет отслеживать производство по заказ-нарядам, производственным графикам или этикеткам KANBAN;
  4. Позволяет обрабатывать заказы клиентов быстро, гарантируя, что предложения, сделанные клиентам, будут реалистичны и выполнимы. ;
  5. Конфигурирует иерархическую структуры предприятия, отражающая все взаимосвязи между отдельными предприятиями холдинга, заводами, подразделениями или любыми другими структурными единицами и т.д.



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


У бывшего HighJump (Krber) есть три различных WMS теперь они называются Krber InMotion Warehouse Edge, Krber InMotion Enterprise 3PL и Krber InMotion Warehouse Advantage. В рамках данной статьи разберем только последнее приложение.


Основным преимуществом Krber InMotion Warehouse Advantage перед остальными поставщиками, является высокая степень адаптивности к бизнес-процессам заказчиков и клиентов, основываясь на SOA (модульный подход к разработке программного обеспечения). В данном приложении сложные комплексные решения адаптируются без каких-либо изменений исходного продукта.


Основными особенностями данного продукта, являются:


  1. Внесение в любое время изменений в решение;
  2. Конфигурация системы заказчика в полном объеме, включая самостоятельно выполненные наработки, поддерживается;
  3. Последующие модификации системы и переходы на новые версии позволяют заказчику сохранить все выполненные наработки;
  4. Наличие сертифицированного встроенного модуля Advantage Link интегрирующего все приложения Krber c основными мировыми бизнес системами.



Manhattan Associates, основана в 1990 году и является на сегодняшний день лидеров в поставки технических решений в такие области, как управления цепочками поставок (SCM) и систем управления складом (WMS).
Manhattan Associates предлагает широкий портфель решений SCM, который включает три различных WMS: управление транспортировкой, омниканальное управление, включая распределенное управление заказами (DOM); планирование цепочки поставок и поддержка поставщиков.
Решения Manhattan Associates обладают широким функционалом и возможностью масштабирования системы, позволяют автоматизировать полный комплекс складских операций (от приемки до отгрузки).


Инновационными решениями можно считать:


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

Manhattan Associates имеет на своем корабле три различных предложения WMS Manhattan SCALE, Warehouse Management для IBM i (WMi) и Warehouse Management для открытых систем (WMOS). Разберем самый востребованный продукт данной компании Manhattan SCALE с припиской ILS.


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


Исходя из мощного потенциала данного приложения, оно дает возможности:


  1. оптимизировать размещение товаров на складе;
  2. осуществлять мониторинг операций на складе;
  3. ведения документооборота и взаимодействия с контрагентами;
  4. осуществлять расчет эффективности работы персонала;
  5. выполнять все операции с помощью RF-терминалов;
  6. управлять заданиями для сотрудников и контроль загрузки персонала;



Исходя из рассмотренных компаний и продуктов, которые востребованы на рынке WMS-систем, а так же их особенностей, то можно сделать вывод. Что рассмотрение двух оставшихся компаний (Oracle, SAP) в плоскости лидеров, не имеет особого смысла. Поскольку многие приложения сходи по функциональности и по выполнению бизнес-процессов.


Так же стоит ответить на последний вопрос в начале статьи: Какой вывод можно сделать исходя из представленных особенностей?. Как было выше сказано многие приложения из того списка, который был приведен выше, являются технологическими решениями последнего уровня автоматизации в WMS-системах и предназначены для крупных складов и компании. Их функционал и бизнес-решения схожи, но имеются ряд отличительных свойств в таких решениях. Как пример таких различий можно привести: выполнение всех операции с помощью RF-терминалов, интеграция с другими приложениями, а так же предоставления функциональности не связанными с областями WMS и SCM.


Поскольку в статье присутствует слово Анализ, то проанализировав ситуацию и прочитав множество статей и заглянув в английскую версию статьи Magic Quadrant for Warehouse Management Systems, можно сделать вывод, что компания Manhattan Associates являются лидерами в области представлений услуг WMS и SCM, а их продукция пользуется спросом не только в России, но и за рубежом. Это не сказки, если не верите. Вот вам тот же Магический квадрант, но только за 2019 год.


Если выбирать то выбираете продукцию компании Manhattan Associates, но так же не стоит забывать и о других продуктах и компаниях! Может, что-то из них подойдет и вашим потребностям! Это, конечно, дорого, но надежнее чем разрабатывание своего решения!

Квадрант за 2019 год.


Данный квадрант можно найти на сайте компании Gartner https://www.gartner.com/




Автор: Евченко Иван Валерьевич


Северо-кавказcкий социальный институт 2020 год

Подробнее..

BAдайджест, январь 2021 как отклонять feature request иоценить стоимость ошибки вБП

10.02.2021 14:12:50 | Автор: admin

Всем привет! Меня зовут Юра, яBA Tech Lead вNIX, аэто первый выпуск дайджеста для бизнес-аналитиков. Внем вынайдете, намой взгляд, ценные идостойные внимания материалы за прошлый месяц. Enjoy!

В скобках возле заголовков уровень сложности статьи (Normal * Hard Expert ***) и примерное время на изучение материала.

Business Analysis

Sorting Through the Pile: Classifying Customer Requirements (*, 6 мин). Классификация требований от дедушки Вигерса для самых маленьких. Новичкам в помощь, старичкам в радость.

Tactfully rejecting feature requests (**, 9 мин). Каждый из нас попадал в ситуацию, когда приходит очередной важный запрос на фичу, а она не ложится в продукт не помогает реализации бизнес-идеи, ломает архитектуру, не приносит пользы целевой аудитории и так далее. А отказать тому же клиенту неудобно, он же клиент. Так вот, в статье есть рекомендации о том, как просящему понять, почему фича не нужна, через несколько несложных шагов и техник.

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

The 10 Attitudes of Outstanding Product Owners (**, 7 мин). Кто еще не сталкивался узнать, а кто знает вспомнить о том, что лежит в основе этой роли. К аналитикам эти принципы относятся в равной степени.

Top 7 Hybrid Business Analysis roles (*, 10 мин). Разбор наиболее частых вариантов совмещения профессий БА+. По полочкам разложено, какие варианты более удачны, а какие скорее нет.

Writing Kick-Ass User Stories (*, 7 мин). Очень короткий, но емкий гайд, расписанный на примере, который поможет быстро погрузиться в процесс написания User Stories.

The Business Value of Better Requirements (*, 6 мин). Свежий материал от дедушки Вигерса на тему почему хорошие требования очень экономят бюджет.

No One Expects the Requirements Inquisition: Asking Next-Level Questions (*, 6 мин). И еще материал от Карла (!). На этот раз о том, какие вопросы помогут углубиться в реальные needs.

Почему важно наглядно доносить информацию. Визуализация данных для бизнес-аналитика (**, 10 мин). Кирилл Белявский из SoftServe рассказывает об актуальности техник визуализации, важности для бизнеса, восприятии визуализации, а также популярных инструментах.

Build effective Minimum Viable Products with the MVP Experiment Canvas (**, 13 мин). Бесплатный фреймворк для структурирования и запуска MVP и валидации бизнес-идеи.

Расширяем кругозор

Как не надо релизить проекты. Работаем с требованиями, оценкой и оплатой (**, 15 мин). Страшные сказки на ночь о нерадивых клиентах, срывах сроков, размытых требованиях, форс-мажорных ситуациях и других бабайках, которыми только и делать, что пугать Junior'ов. Если же серьезно, то в статье много жизненных ситуаций, на которых можно поучиться не совершать чужие ошибки и предвидеть свои.

Lightning Cast: Resistance to Change (*, 4 мин). Выжимка теории по Goldratts Four Quadrants on Change почему сопротивляются изменениям и что с этим делать.

Your Product Has Too Many Features (*, 6 мин). Взгляд на возможные причины захламления фичами на примерах Facebook / Amazon, а также - что с этим делать.

Beware SAFe (the Scaled Agile Framework for Enterprise), an Unholy Incarnation of Darkness (*, 14 мин). Как можно догадаться из названия статьи, автор далеко не фанат SAFe, у которого пригорело. Мне довелось лишь слышать о SAFe, изучать теорию, но использовать ни разу. Тем не менее мне все казалось, что два дня планирования это перебор, ограничивающий команды, хоть мне и были озвучены весомые аргументы за. Автор статьи приводит много аргументов против, в том числе ссылки на Кена Швабера и других лиц, которые высказывали свои опасения на счет SAFe.

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

Готумо до запуску продукт. Чек-лист для Product Manager (**, 10 мин). Мария делится опытом и дает нам рабочий инструмент, которым стоит воспользоваться.

A comprehensive list of UX design methods & deliverables (*, 12 мин). Подборка техник по сабжу краткий обзор + ссылки на почитать. Пожалуй, наиболее лаконичный и полный обзор из тех, что встречал.

How to Spot and Prevent Useless Meetings (*, 4 мин). Признаки, с помощью которых вы быстро определите, откуда стоит слинять, либо, если не получится, хотя бы взять ноутбук, чтобы поработать.

IT-словарик для не-айтишников (*, 4 мин). Словарь терминов, которые стоит знать каждому :)

UI cheat sheet: Icon categories + icon style reference guide (**, 21 мин). Очередной шикарный гайд от Тессы Гадд, на этот раз о том, как правильно делать иконки.

Подробнее..

Root Cause Analysis как метод предотвращения багов

02.03.2021 22:15:14 | Автор: admin

Привет! Мое имя Юра Гомон, яBATech Lead вNIX ивот уже 8лет занимаюсь бизнес-анализом, помогая реализовывать веб- имобильные решения для бизнеса, атакже автоматизировать бизнес-процессы. Мое имя кажется Вам знакомым, т.к. недавно я опубликовал на Хабре свой BADigest.

Цель статьи напомнить бизнес-аналитикам ометоде Root Cause Analysis (далее RCA) иподелиться опытом его применения для предотвращения багов.

В сети очень много информации по RCA, потому не хочу повторяться в отношении теории. Если Вы еще не использовали Problem-solving техники и, в частности, RCA, рекомендую ознакомиться с материалами по ссылками ниже, а уже затем переходить к статье:

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

Кейс первый ополитиках

Вливной enterprise-системе на200+ пользователей все было хорошо: жили нетужили, работали три года после релиза. Новодин прекрасный день при попытке перейти поссылке всистему вместо желаемого результата пользователей ждало угрожающее сообщение

Аналог сообщения, которое увидели пользователи. Оригинал несохранился :) Источник:Bytebitebit

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

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

Почему пользователи видят эту страницу?
Посмотрим А-а, так это заэкспайрился SSL-сертификат, продлим, ивсе будет впорядке.
Апочему это несделали заранее?
Никто непоставил напоминание, атри года быстро пролетели.
Резонно. Как думаете, почему непоставили?
Хм, по-моему, это первый проект, где была потребность виспользовании SSL. Это уже после вас стали сертификаты покупать идругим.
Так это ивдругих системах может случиться?
Пожалуй, пойдем везде проверим, поставим напоминалки ивгайдлайны внутренних систем добавим, что надо незабывать это делать.

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

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

Кейс второй олюдях

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

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

  1. Менеджер задокументировал ключевые поинты разговора счеловеком названные импричины.

  2. Предположил варианты сосвоего опыта.

  3. Собрал доказательства существованию причин, проанализировал.

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

Граф причин проблемы, воссозданный сослов рассказчика

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

  1. Сначала человек стал засиживаться вофисе после работы почти каждый день.

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

  3. Следом вместо домашней еды онстал питаться подножным кормом.

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

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

Кейс третий оработе стребованиями

Когда БАвходит впроект, который идет уже некоторое время, первая задача разобраться стребованиями, тоесть провести аудит. Обэтом кейсе яделалдоклад наNIX Multiconfв2019году. Сегодня раскрою некоторые детали того случая сточки зрения применения RCA: как искали причины того, почему впроекте начало появляться много багов.

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

Коммуникация

Невозможно было найти ответ или решение через время. Обсуждение требований велось вAsana, Slack, JIRA, через почту, вонлайн- иофлайн-документах. Среди всех источников небыло единого:

  • клиент писал там, где ему было удобно втекущий момент;

  • остальные команды неподдержали нашу критику, поскольку имитак норм;

  • бюджет наведение SRS, митинг-минуток иструктурирование информации невыделялся.

Наша команда неполучала ответов вовремя. Другие команды непонимали наших вопросов:

  • трудности перевода;

  • если непинговать, томогли забы(и)вать нам ответить;

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

Стейкхолдеры

Наша команда получала разную информацию изразных источников.

Небыло обмена решениями сдругими командами:

  • небыло четких зон ответственности вплане шаринга информации;

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

Клиент часто менял требования/ принимал решения. Настолько часто, что одна команда успевала получить одно, авторая уже другое:

  • уклиента небыло четкой бизнес-идеи, онстарался быстро адаптироваться под нужды целевой аудитории;

  • клиент хотел реализовать как можно больше фич, невзирая наобщий концепт приложения, атакже удовлетворить всех пользователей;

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

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

Недожидаясь правок понескольким десяткам других пунктов, ЛПРы состороны команды реорганизовали перечень каналов связи иоставили всего три: обсуждение идей велось вAsana, дизайна итребований всоответствующих каналах Slack, тамже создали канал для общих вопросов. Кроме того, все решения покаждой функции стали фиксировать вJIRA, куда перевели только тетаски, которые должны были идти вразработку. Вдополнение ввели жесткие правила понеизменности скоупа врамках спринта (либо полной приостановке ипланированию спринта снуля) идлительности спринта.

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

Ичто?

Есть вещи, которые вот уже 8лет, смомента как явошел вIT, янеперестаю евангелизировать, поскольку нахожу имприменение либо вижу отражение вокружающем мире. Среди них философияпиши-сокращай, модель Кано, принцип Парето, think out ofthe box итак далее. Как выуже догадались, RCA входит вэтот перечень. Авсе потому, что важнейшая, если непервичная задачаБА заключается втом, чтобы понять почему. Будь топроблемная функция всистеме, ошибки вбизнес-процессах, нюансы человеческого поведения, негативные события вокруг все имеет глубокие корни.

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

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

Подробнее..

Перевод Язык моделирования Alloy и приключения с параллельными запросами к базе данных

10.03.2021 16:14:14 | Автор: admin

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



О качестве программного обеспечения и инструментарии


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


  1. Анализ и создание спецификаций
  2. Устранение простых ошибок с использованием системы типов Haskell
  3. Стандартные юнит-тесты и интеграционные тесты
  4. Непрерывная интеграция
  5. Обязательные ревью кода
  6. Тестирование на стендах, проводимое QA инженерами
    (мы используем Octopod для оптимизации процесса разработки и QA)
  7. Тестирование в pre-production среде
  8. Ведение логов и контроль ошибок на этапе эксплуатации

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


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


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


Итак, каков самый ранний этап, на котором мы можем выявить ошибки? Удивительно, но мы можем существенно повысить шансы на выявление ошибок ещё до того, как будет написана первая строка кода!


Alloy выходит на сцену


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


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


Давайте приведем пример. Недавно у нас возникла неприятная проблема со следующим куском кода:


newAuthCode  :: (MonadWhatever m)  => DB.Client  -> DB.SessionId  -> m DB.AuthorizationCodenewAuthCode clid sid = do  let codeData = mkAuthCodeFor clid sid  void $ DB.deleteAllCodes clid sid  void $ DB.insertAuthCode codeData  return code

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


Как это получилось?


Моделирование


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


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


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


open util/time  // Импортируем предопределённые объекты Timesig Operation       // У нас есть операции...  { delete : Time   // ...которые удаляют в какой-то момент времени  , insert : Time   // ...и производят вставку в какой-то другой  }  { lt[delete,insert]  // Удаления происходят до вставок    lt[first,delete]   // По техническим причинам в первый                        // момент времени ничего не происходит  }  run {some Operation} for 4 // Показать произвольный пример модели                             // с <= 4 операциями

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


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



Чтобы Alloy показал другие модели, можно нажать 'next'.


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


this/OperationdeleteinsertOperation    Time Time   Operation удаляет в момент Time и   вставляет в момент TimeOperation    Time Time   Operation удаляет в момент Time и   и вставляет в момент Time                                                 ОЙ!

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


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


Проблема найдена!


Давайте её исправим!


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


code <- run $ do  handleJust constraintViolation    (launchPG $ selectCodeForSession clid scope sid    (launchPG . pgWithTransaction $ newAuthCode clid scope sid)

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


Будет ли это работать сейчас?


Давайте быстро построим модель Alloy для нашего исправления, чтобы проверить его корректность:


open util/time // Импортируем Timesig Token {} // Объекты с названием Tokenone sig DBState // База данных с токенами {userToken : Token lone -> Time}    // В БД не более одного токена в каждый момент врвмени    // (т.к. ограничения БД не позволяют хранить больше одного)sig Operation {   delete : Time , insert : Time , select : Time // Наши операции теперь могут выполнять select}{  lt[first,delete]   // Ничего не происходит в первый момент времени                     // по техническим причинам  lt[delete,insert]  // Первой выполняется операция delete  lte[insert,select] // select выполняется после или во время insert'а  no userToken.(insert.prev) // Если вставка сработала (т.е. таблица  => insert = select         // была пустой во время выполнения),                             // получаем значение в тот же самый                              // момент времени (т.е. у нас запрос                             // 'INSERT RETURNING').                             // В противном случае вызываем обработчик                             // исключения, и select выполняется чуть позже}

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


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


fact Trace {                           // Факт Trace описывает поведение системы all t : Time - first | {              // на всех шагах, кроме первого:   some delete.t => no userToken.t       // Если происходит удаление, таблица пуста   some insert.t => some userToken.t     // Если происходит вставка, таблица не пуста   no delete.t and no insert.t           // Если не происходит ни вставок, ни удалений,    => userToken.t = userToken.(t.prev)  // таблица не меняется  }}

То есть мы описываем, как состояние базы данных изменяется в зависимости от некоторых происходящих событий.


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


Давайте примем это за утверждение и попросим Alloy проверить его.


assert selectIsGood {         // То, что мы хотим проверить all s : Operation.select |   // Всегда, когда выполняется select,  some userToken.s            // в базе присутствуем токен}check selectIsGood for 6 // Проверить, что selectIsGood всегда истинно

К сожалению, запуск этой проверки дает нам следующий контрпример:


DBState userToken   DBStateTokenTime                 Token находится в БД в моменты Time и Time              Time                TokenTime   Token в БД в момент Time.                                    Токены есть в таблице только                 моменты Time, Time и Time                 Заменит, что в момент                 Time токенов нет!Operation     deleteinsertselectOperation     TIME Time TimeOperation     Time Time TIME    Таблица пуста в момент Time и     select не работает для Operation!Operation     Time Time Time                                               Это моменты времени, когда                происходят соответствующие действия

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


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


Параллельная обработка легко не дается.


Мои выводы


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


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


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


Где взять Alloy?


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





P.S. Правильное решение этой проблемы заключается в том, чтобы использовать сериализуемые транзакции и не возиться с параллельной обработкой.

Подробнее..

BAдайджест, февраль 2021 тренды на2021, чек-лист тестирования требований

21.03.2021 18:07:02 | Автор: admin

Всем привет! Встречайте дайджест ссамыми сочными статьями зафевраль.

Вскобках возле заголовков уровень сложности статьи (Normal * Hard Expert ***) ипримерное время наизучение материала

Business Analysis

6Trends Impacting Business Analysis toWatch in2021(*, 5мин). Тренды глазами Delvin Fletcher, President and Chief Executive Officer ofthe IIBA.

Круглый стол Эффективные техники для выявления требований(*, 30мин). Запись доклада Дениса Гобова дляanalyst.by, где были раскрыты такие темы, как Фреймворк процесса выявления требований, Модель Кано иеесвязь стехниками выявления, Классификация техник иКакие техники действительно используют бизнес-аналитики (результаты опросаБА вУкраине).

Уточняем детали проекта методами практической психологии(*, 6мин). Как информация (требования) искажаются при передаче между людьми ичто сэтим делать.

System Analysis Meetup 18/02 отRaiffeisenbank(**, 186мин). Обсуждали, как аналитик может влиять напроцессы вAgile-команде, как использование Agile снижает риски проекта (нонеисключает всех) икак изменилась роль аналитика после цифровой трансформации.

Аудит технчно документац: кому, навщо, як(*, 7мин). Ирина делится снами опытом проведения аудита ивнедрения его результатов.

Чек-лист тестирования требований(*, 11мин). Встатье разобраны основные критерии качества хороших требований напримерах изреальной жизни

Как мыиспользуем Confluence для разработки требований кпродукту(*, 8мин). Шикарная статья, вкоторой рассказывается оприменяемых подходах иплагинах. Очень рекомендую кпрочтению! Апредставленные плагины самый сок, без них жить очень непросто :)

AChecklist For Business Analysis Planning(*, 6мин). Опытный аналитик-ментор делится своим чек-листом для планирования бизнес-анализа.

Расширяем кругозор

Cheatsheet Differences Scrum vsScrumban vsKanban(*, 4мин). Освежаем впамяти основные различия между одними изсамых популярных методологий.

UI-элементы ижесты вмобильных приложениях(*, 3мин). Обзор сабжа сбольшим количеством примеров.

Never Forget aPassword Again(*, 12мин). Эссе, вкотором сделан обзор важности создания сильных паролей каккаунтам, оспособах взлома иметодах защиты.

Personas: AWaste OfMoney And Time(*, 7мин). Критика техники персон, что применять вместо нее икакие риски могут из-за этого выстрелить.

Three drawingsI use toexplain agile(*, 5мин). Отличная статья за2018-й,которая поможет быстро понять суть Agile, апотом показать его ценность клиенту.

How todiscover your customers willingness topay(**, 10мин). Если высделали классный продукт, показали его фокус-группе, которой онпонравился это еще незначит, что вызаработаете много денег. Это значит, что высделали что-то хорошее. Авот будутли заэто платить... Встатье рассматриваются подходы, которые должны помочь выудить изпотенциальных клиентов информацию отом, насколько ваш продукт для них ценен иготовыли они (исколько) платить.

UI-элементы ижесты вмобильных приложениях What does afterUX even mean?(*, 5мин). Абсолютно шикарная статья, которая показывает, как может быть вреден необдуманный UX-design, если слепо повторять паттерны.

The Homer Principle(*, 6мин). Юмористическая ижизненная статья отом, счем придется столкнуться при разработке продукта вконтексте восприятия продукта конечными пользователями. Напримере Гомера Симпсона автор вывел 6принципов, скоторым нужно будет работать.

Почему, чтобы переместить кнопку, нужно две недели(*, 5мин). Навесьма простом примере показано, как впростые запросы вреальности оказываются весьма нетривиальными. Можно взять пример заоснову ипользоваться вследующий раз (применяя квашему случаю), когда клиент удивляется, почему так долго.

Product Owner vs. Business Analyst Demystifying the similarities and the differences(*, 11мин). Годнота изблога Adaptive US одного изпровайдеров обучения для сдачи экзаменов IIBA.

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

Building User Trust InUXDesign(***, 19мин). Статья отом, как провести пользователя отэтапа яовас инеслышал, кто вытакие дообоже, яхочу пользоваться вашим продуктом всю жизнь! спомощью понимания пользователя инекоторых маркетинговых уловок.

Material Design Text Fields Are Badly Designed(*, 6мин). Пост критики (обоснованной, намой взгляд) material design.

State OfGDPR In2021: Key Updates And What They Mean(**, 20мин). Изменения вGDPR икак теперь сэтим жить.

Подробнее..

BAдайджест, апрель 2021 тестирование требований, непрерывная discovery-фаза

08.05.2021 20:10:07 | Автор: admin

Всем привет! Встречайте свежий дайджест ссамыми сочными статьями заапрель.

Вскобках возле заголовков уровень сложности статьи (Normal * Hard ** Expert ***) ипримерное время наизучение материала.

Business Analysis

Тестирование требований: как янахожу ошибки вбизнес-логике фичи прежде, чем ихзакодят(*, 16мин). Авторка делится опытом тестирования требований через применение Use Case Scenarios.

Product Discovery IsAMindset, Not AProcess(**, 8мин). Автор поясняет, почему непрерывная Discovery-фаза (которая незаканчивается состартом проекта) залог успеха.

Requirements for Implementing Packaged Solutions(**, 6мин). Дедушка Вигерс продолжает нас радовать! Вэтот раз онподелился подходом копределению требований при выборе коробочных решений.

Локализация (адаптация) продукта для работы вновых регионах(*, 6мин). Авторка делится своим опытом поразработке требований клокализации решений напримерах продуктов E-commerce.

Нюансы общения ванглоязычной среде. Часть вторая: small talk(*, 6мин). Продолжение статьи, окоторой упоминалвпрошлом дайджесте. Впродолжении тематики культуры беседы, вовторой части авторка рассказывает обопыте применения small talk.

Что такое бизнес-анализ. Разрушаем мифы оработе BA(*, 11мин). Интересная подборка иразнос самых популярных заблуждений ороли ВА.

Новое как старое. Как провести успешный User Acceptance Testing для Reverse Engineering проекта(**, 12мин). Авторка делится вызовами иопытом работы впроектах пореализации NFR (Functionality) при переносе старой функциональности вновый продукт.

Масштабный проект повнедрению SAP S/4HANA вудаленном режиме: уроки, которые мыусвоили(***, 10мин). Внедрение продуктов, тем более таких крупных как SAP, работа спользователями дело крайне сложное. Вам мало? Добавьте кэтому удаленку! Статья отом, скакими проблемами столкнулись внедряторы икак ихрешали.

Как выбрать уровень статистической значимости для AB-теста икак интерпретировать результат(**, 12мин). Напримерах автор подробно рассматривает результаты различных A/B тестирований икак ихправильно интерпретировать.

Расширяем кругозор

SCRUM: Понимание иприменение фреймворка,часть 1(**, 15мин)ичасть 2(**, 12мин). Автор предлагает формализованный подход для оценки зрелости команды/ компании при внедрении SCRUM. Как минимум это свежий взгляд наиспользование методологии, как максимум потенциально зрелый подход квнедрению. Нужно тестить :)

The Search Before the Search: Keyword Foraging(*, 5мин). Бывалоли увас так, что прежде чем что-либо загуглить, выгуглили как это называется? Еслида, тостатья познакомит вас стермином keyword foraging, который объясняет это явление.

Bringing product thinking toany team(**, 8мин). Статья отом, как ставить потребности пользователей вцентр внимания. Автор делится опытом применения продуктового мышления для оптимизации работы команды навсех этапах проекта.

Comprehensive anatomy ofall Design Thinking workshops(*, 16мин). Встатье рассмотрены наиболее популярные виды воркшопов для создания хорошего UI/UXс применением дизайн-мышления.

IsYour UIMessy? 7Common Mistakes toAvoid(*, 12мин). Автор подробно рассказывает отом, почему нельзя игнорировать мелкие детали, как избежать грязи впользовательском интерфейсе исделать UXкомфортнее.

10Psychological rulesI used tomake users love atfirst sight(**, 8мин). Автор делится рядом подходов, которые ониспользует для расположения пользователей кпродукту навербально-психологическом уровне.

Аунас нет мышей! Амызаведём... Какая польза отархитектора решений(*, 9мин). Обзор роли архитектора решений изачем эта роль нужна.

Designing toreduce the users mental burden(*, 7мин). Хороший продукт невынуждает пользователей думать отом, как импользоваться. Карл Вигерс приводит примеры когда мелкая недоработка создает лишнюю умственную нагрузку ивызывает дискомфорт.

How ToBake Layers OfAccessibility Testing Into Your Process(**, 15мин). Accessibility-эксперты делятся опытом внедрения accessibility-тестирования впроцесс разработки цифровых продуктов.

Introducing FigJam(*, 4мин). Обзор новой коллаборативной фичи для Figma отразработчика инструмента.

Best practice for date-of-birth form fields(*, 6мин). Разбор наиболее удачных, помнению автора, паттернов реализации поля date ofbirth.

Designing for the autistic community(*, 7мин). Вовремя создания продукта, мыпомним обособенностях портрета пользователя, который заточен под большинство наших юзеров. При этом, нередко мызабываем пользователях сособыми потребностями. Встатье авторка описывает принципы создания интерфейсов сфокусом налюдей срасстройствами аутистического спектра.

Designing for Dyslexia(*, 5мин). Вкопилочку кпредыдущей статье как вразработке интерфейса учесть потребности пользователей, страдающих дислексией.

10Figma Tricks IWish IKnew Earlier(*, 4мин). Подборка хаков Figma окоторыхвы, возможно, неслышали.

The UI& UXtips collection,часть 1(*, 14мин)ичасть 2(*, 9мин). Шикарная подборка из34 + 18советов посабжу.

Этический антидизайн: как разработать продукт, невызывающий привыкания(*, 10мин). Антидизайн средство для защиты отдурака инетолько.

Best Practices For Modal Window Design(*, 9мин). Автор делится 9незамысловатыми принципами для оптимизации проектирования модальных окон.

Ближайшие события, курсы

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

19мая состоится бесплатная онлайн-лекцияBA&UX: взаимодействие сускорением. Входе лекции выузнаете рекомендации для построения дизайн-процесса, атакже отехниках BA&UX.

29мая состоится платная конференция для бизнес-аналитиков. Вас ждут доклады 6спикеров изУкраины иЛатвии, скоторыми высможете коммуницировать иполезно провести время вкругу коллег.

Подробнее..

BAдайджест, май 2021 подкаст сКарлом Вигерсом, Docs asCode

18.06.2021 00:22:38 | Автор: admin

Всем привет! Встречайте свежий дайджест ссамыми сочными статьями замай.

Вскобках возле заголовков уровень сложности статьи (Normal * Hard ** Expert ***) ипримерное время наизучение материала

Business Analysis

Подкаст. MBA220: Thoughtless Design with Karl Wiegers(**, 32мин). Карл Вигерс продолжает радовать нас своим опытом. Вэтот раз онделится принципами иуроками, которые извлек изнекачественного дизайна, атакже рассказывает, чтоВы можете сделать, чтобы помочь всоздании дизайна.

Нужнали сертификация для бизнес-аналитика?(**, 10мин). Все осертификацииВА: список популярных, какие преимущества каждая даёт инужнали сертификация вообще.

Docs asCode: введение впредмет(**, 21мин). Автор делится многолетним опытом, приобретенным напути кDocs asCode, атакже рекомендациями повнедрению этого фреймворка.

Business Analyst: Tools and Principles for Professional Self-Development(*, 16мин). Структурированный набор материалов, который поможет обнаружить изаполнить пробелы всвоих навыках. Статью готовил аналитик с15+лет опыта, всоавторстве сдругими опытными БА.

Как проводить интервью сзаказчиком(*, 11мин). Кирилл Белявский делится секретом проведения успешных интервью.

User Experience inProduct(*, 8мин). Как исследования ианализ пользователей помогут увеличить значимость вашего продукта для конечных пользователей.

Моделирование данных: обзор(**, 6мин). Встатье автор раскрывает понятие моделирование данных, атакже делится оптимальной пошаговой инструкцией поприменению.

Цикл статей про бизнес-анализ напресейле. Статья первая, или почему всем нужен БА?(*, 5мин). Старт цикла статей ороли изадачах бизнес-аналитика напресейле. Впервой части: что такое пресейл, роль ивлияние бизнес-аналитика наэтом этапе, артефакты, которые могут понадобиться.

Расширяем кругозор

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

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

Frustrating Design Patterns That Need Fixing: Birthday Picker(*, 16мин). Подробный обзор неудачных шаблонов проектирования поля для выбора даты рождения.

Как работать сбэклогом иприоритизацией фич взрелом продукте(*, 8мин). CTO одной изпродуктовых компаний делится опытом приоритезации фич врамках канбан-процесса.

Three Levels ofPain Points inCustomer Experience(*, 8мин). Что такое болевые точки вклиентском опыте, накаких уровнях взаимодействия возникают ипонять какие наиболее критичны.

Left-Side Vertical Navigation onDesktop: Scalable, Responsive, and Easy toScan(*, 12мин). Статья овесьма непривычном подходе кпостроению навигации, когда она находится невшапке сайта, анаместе левой боковой панели: каким доменам подходит, преимущества ирекомендации поиспользованию.

Все, что выхотели знать про диалоговый UX/UIв проектировании чат-ботов(*, 9мин). Встатье покрыто определение диалогового UX/UI-дизайн, есть пошаговые рекомендации счего начать, атакже годные лайфхаки для проектирования сценариев для чат-бота.

Какие рефералки работают: сбонусами для себя, для того парня или для обоих? Исследование(*, 4мин). Саммари исследования видов рефералок.

The role ofpassword verification atsign up(*, 7мин). Анализ практик реализации поля ввода пароля.

UX-Roadmapping Workshops: Agenda + Activities(**, 16мин). Содержательная статья осоздании дорожных карт UX.

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

UI& UXmicro-tips: Volume five(*, 4мин). Коллекция небольших, нополезных подсказок поUI/UX.

Подробнее..

Перевод Я спарсил больше 1000 топовых Github-профилей по машинному обучению и вот что я узнал

08.02.2021 12:21:23 | Автор: admin


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

Как я работал


Инструменты

Я использовал три инструмента для скрейпинга:
  • Beautiful Soup для извлечения URL всех репозиториев с тегом машинное обучение. Это Python библиотека, которая позволяет значительно упростить скрейпинг.
  • PyGithub позволяет извлекать информацию о пользователях. Это еще одна Python-библиотека для использования с Github API v3. Она дает возможность управлять различными Github-ресурсами (репозитории, профили пользователей, организации и т.п.) при помощи Python-скриптов.
  • Requests для извлечения информации о репозиториях и линков на профили контрибьюторов.

Методы

Я спарсил далеко не все, а лишь владельцев и 30 самых активных контрибьюторов 90 топовых репозиториев, которые оказались в результатах поиска.





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

new_profile.info()



Первые 13 параметров были получены отсюда.



Оставшиеся я взял из репозиториев пользователя:

  • total_stars общее количество звезд всех репозиториев
  • max_star максимальное количество звезд всех репозиториев
  • forks общее количество форков всех репозиториев
  • descriptions описания из всех репозиториев пользователя всех репо
  • contribution количество контрибуций за последний год




Визуализируем данные


Гистограммы

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

import matplotlib.pyplot as pltimport numpy as npimport plotly.express as px # for plottingimport altair as alt # for plottingimport datapane as dp # for creating a report for your findings top_followers = new_profile.sort_values(by='followers', axis=0, ascending=False) fig = px.bar(top_followers,             x='user_name',             y='followers',             hover_data=['followers'],            )fig.show()

Вот что получилось.

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



Как видим, у llSourcell (Siraj Raval) больше всего фолловеров (36261). У второго по популярности количество фолловеров меньше в три раза (12682).

Мы можем пойти дальше и выяснить, что 1% профилей получил 41% всех фолловеров!

>>> top_n = int(len(top_followers) * 0.01)12>>> sum(top_followers.iloc[0: top_n,:].loc[:, 'followers'])/sum(top_followers.followers)0.41293075864408607

Далее визуализируем информацию по total_stars, max_star, forks при помощи логарифмической шкалы.

figs = [] # list to save all the plots and table features = ['followers',               'following',               'total_stars',               'max_star',               'forks',                'contribution']for col in features:    top_col = new_profile.sort_values(by=col, axis=0, ascending=False)        log_y = False     #change scale of y-axis of every feature to log except contribution    if col != 'contribution':        log_y = True            fig = px.bar(top_col,             x='user_name',             y=col,             hover_data=[col],             log_y = log_y            )        fig.update_layout({'plot_bgcolor': 'rgba(36, 83, 97, 0.06)'}) #change background coor        fig.show()        figs.append(dp.Plot(fig))

Получается вот так.

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

Корреляция

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

correlation = px.scatter_matrix(new_profile, dimensions=['forks', 'total_stars', 'followers',                                 'following', 'max_star','contribution'],                               title='Correlation between datapoints',                               width=800, height=800)correlation.show() corr = new_profile.corr() figs.append(dp.Plot(correlation))figs.append(dp.Table(corr))corr

Получается вот так и еще так.

Наиболее сильные положительные зависимости образуются между:
  • Максимальным количеством звезд и общим их количеством (0.939)
  • Количество форков и общим количеством звезд (0,929)
  • Количеством форков и количеством фолловеров (0,774)
  • Количеством фолловеров и общим количеством звезд (0,632)

Языки программирования


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

# Collect languages from all repos of al userslanguages = []for language in list(new_profile['languages']):    try:        languages += language    except:        languages += ['None']        # Count the frequency of each languagefrom collections import Counterocc = dict(Counter(languages)) # Remove languages below count of 10top_languages = [(language, frequency) for language, frequency in occ.items() if frequency > 10]top_languages = list(zip(*top_languages)) language_df = pd.DataFrame(data = {'languages': top_languages[0],                           'frequency': top_languages[1]}) language_df.sort_values(by='frequency', axis=0, inplace=True, ascending=False) language = px.bar(language_df, y='frequency', x='languages',      title='Frequency of languages') figs.append(dp.Plot(language)) language.show()

Соответственно, в топ-10 языков входят:

  • Python
  • JavaScript
  • HTML
  • Jupyter Notebook
  • Shell и т.п.

Местонахождение


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

from geopy.geocoders import Nominatimimport folium geolocator = Nominatim(user_agent='my_app') locations = list(new_profile['location']) # Extract lats and lonslats = []lons = []exceptions = [] for loc in locations:    try:        location = geolocator.geocode(loc)        lats.append(location.latitude)        lons.append(location.longitude)        print(location.address)    except:        print('exception', loc)        exceptions.append(loc)        print(len(exceptions)) # output: 17  # Remove the locations not found in maplocation_df = new_profile[~new_profile.location.isin(exceptions)] location_df['latitude'] = latslocation_df['longitude'] = lons

Ну а затем, для построения карты используем Plotlys scatter_geo

# Visualize with Plotly's scatter_geom = px.scatter_geo(location_df, lat='latitude', lon='longitude',                 color='total_stars', size='forks',                 hover_data=['user_name','followers'],                 title='Locations of Top Users')m.show() figs.append(dp.Plot(m))

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

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


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

import stringimport nltkfrom nltk.corpus import stopwordsfrom nltk.tokenize import word_tokenizefrom nltk.stem import WordNetLemmatizerfrom nltk.tokenize import word_tokenizefrom wordcloud import WordCloud, STOPWORDSimport matplotlib.pyplot as plt nltk.download('stopwords')nltk.download('punkt')nltk.download('wordnet')       def process_text(features):  '''Function to process texts'''        features = [row for row in features if row != None]        text = ' '.join(features)                # lowercase    text = text.lower()     #remove punctuation    text = text.translate(str.maketrans('', '', string.punctuation))     #remove stopwords    stop_words = set(stopwords.words('english'))     #tokenize    tokens = word_tokenize(text)    new_text = [i for i in tokens if not i in stop_words]        new_text = ' '.join(new_text)        return new_text def make_wordcloud(new_text):  '''Function to make wordcloud'''        wordcloud = WordCloud(width = 800, height = 800,                background_color ='white',                min_font_size = 10).generate(new_text)         fig = plt.figure(figsize = (8, 8), facecolor = None)    plt.imshow(wordcloud)    plt.axis("off")    plt.tight_layout(pad = 0)     plt.show()        return fig    descriptions = []for desc in new_profile['descriptions']:    try:        descriptions += desc            except:        pass descriptions = process_text(descriptions) cloud = make_wordcloud(descriptions) figs.append(dp.Plot(cloud))



И то же самое для био

bios = []for bio in new_profile['bio']:    try:        bios.append(bio)            except:        pass      text = process_text(bios) cloud = make_wordcloud(text) figs.append(dp.Plot(cloud))



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

Выводы


Данные получены от пользователей и авторов 90 репозиториев с оптимальным соответствием ключу machine learning. Но гарантии того, что в список попали все ведущие владельцы профилей, эксперты по машинному обучению нет.

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

Ну и если нужно можете форкать код этой статьи и делать с ним что угодно, вот репо</a.

Комментарий к статье Вячеслава Архипова
, специалиста в области Data Science AR-стартапа Banuba и консультанта по учебной программе онлайн-университета Skillbox.

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

Хотелось бы обратить внимание на два факта:

1) несмотря на утверждение автора, что для визуализации показателей профиля используется логарифмическая шкала, на самом деле используются линейные шкалы. Это видно из приведенного листинга (из него следует, что логарифмическая шкала использовалась только для 'contribution'). Все графики выглядят, как построенные в линейной шкале.

А вот само распределение показателя 'contribution' действительно похоже на распределение Парето, известное в применении к частотам встречаемости слов как распределение Ципфа. Графики других показателей мне не очень напоминают распределение Парето.

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

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

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

Анализ и построение ROC-кривых связь с РЛС

28.03.2021 18:07:46 | Автор: admin

Постановка задачи

Многие слышали о ROC-кривой, которая часто используется в ML. Расшифровывая данную аббревиатуру мы получаем, что ROC (англ. receiver operating characteristic). При переводе с английского это означает РХП (рабочая характеристика приемника). Данное понятие позаимствовано из теории обнаружения сигналов. ROC-кривую можно связать с радиолокационной станцией (РЛС), рассматривая ее с точки зрения обнаружения объекта. Опишем это более формально.

РЛС посылает импульсы, которые отражаются от объектов. Отражённый сигналXвоспринимается приёмной антенной радара (Рис. 1). Если есть какой-либо объект, находящийся в зоне обнаружения (ЗО)^1 , то отраженный сигнал будет выше порога детектирования\lambdaи это будет означать наличие объекта(D_1). Если отражённый сигнал ниже порога детектирования, то это означает отсутствие объекта(D_0).

Рис. 1 Поясняющий рисунок!Рис. 1 Поясняющий рисунок!ЗО

^1Зоной обнаружения РЛС называется область пространства, в пределах которой РЛС обеспечивает обнаружение объектов с вероятностями правильного обнаружения не хуже требуемых.

Наличие объекта обозначим как гипотезаH_1, а его отсутствие как гипотезаH_0. СигналX это непрерывная случайная величина. Предположим, что мы имеем условные распределения(1), которые нам известны.

\Large f_{(X|H_0)} (xH_0 ), \ f_{(X|H_1)}(xH_1)\ \ \ \ (1)

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

\Large E[XH_0]<E[XH_1]\ \ \ \ (2)

Учитывая отклонения X , возникающие из-за шума, получаем:

Рис. 2 Условные плотностей (1)Рис. 2 Условные плотностей (1)

На Рис. 2 \eta_0, \eta_1 есть условные математические ожидания случайной величиныXпри условии гипотезы H_0 иH_1 соответственно. При этом, согласно(2), получаем, что _0<_1 .

Как уже было сказано ранее, сигнал X сравнивается с неким порогом, который мы обозначили как . Решение о том есть ли объект в ЗО РЛС или нет обозначим как D_1 и D_0 соответственно. Дополняя Рис. 2 , D_1 иD_0, получаем:

Рис. 3 Условные распределения плотностей (1) c обозначением уровня порога и диапазонов принятия решений D и DРис. 3 Условные распределения плотностей (1) c обозначением уровня порога и диапазонов принятия решений D и D

Получаем следующие условные вероятности:

\Large \begin{array}{l} P_{d}=P\left(D_{1} \mid H_{1}\right)=\displaystyle \int_{D_{1}} f_{X \mid H_{1}}\left(x \mid H_{1}\right) d x \\ P_{f a}=P\left(D_{1} \mid H_{0}\right)= \displaystyle \int_{D_{1}} f_{X \mid H_{0}}\left(x \mid H_{0}\right) d x \end{array} (3)

Условные вероятности(3)можно интерпретировать так:

  • P_d есть вероятность обнаружения объекта при условии, что выполняется гипотеза H_1 , т.е. объект действительно находится в ЗО.

  • P_{fa} есть вероятность ложной тревоги, т.е. мы утверждаем D_1 , которое означает принятие решения о наличии объекта в ЗО, когда в действительности выполняетсяH_0, т.е. объекта в ЗО нет.

Визуализируя интегралы (3) , получаем:

Рис. 4 Вычисление значений P_d и P_fa как площади под кривыми (1)Рис. 4 Вычисление значений P_d и P_fa как площади под кривыми (1)

Очевидно, что с уменьшением порогаплощадь под кривыми будет больше, а значит, чтоP_dиP_{fa}будут увеличиваться.

Кривая, показывающая зависимость P_d как функцию от P_{fa} для различных , называется ROC-кривая (англ. Receiver Operating Characteristic, рабочая характеристика приёмника).

Дисперсия случайной величиныXопределяется характеристикой Отношение сигнал-шум (ОТШ, англ. Signal-to-Noise Ratio, сокр. SNR ), которая записывается как:

\Large S N R=10 \log _{10}\left(\frac{P_{\text {signal }}}{P_{\text {noise }}}\right)[dB] \ \ \ (4)
  • P_{signal} мощность сигнала;

  • P_{noise} мощность шума.

Принимая в (4) P_{signal}=1 , а P_{signal}=^2 дисперсия, получаем:

\Large S N R=10 \log _{10}\left(\frac{1}{\sigma^{2}}\right)[d B]\ \ (5)

ПостроениеROC-кривых и их анализ

Пусть заданы следующие начальные условия:

\Large \begin{array}{c} f_{X \mid H_{0}}\left(x \mid H_{0}\right)= \frac{1}{\sqrt{2 \pi \sigma^{2}}} e^{-\frac{x^{2}}{2 \sigma^{2}}} \\ f_{X \mid H_{1}}\left(x \mid H_{1}\right)=\frac{1}{\sqrt{2 \pi \sigma^{2}}} e^{-\frac{(x-1)^{2}}{2 \sigma^{2}}} \end{array} \ \ \ (6)\Large S N R \in[-1,5]\ \ \ (7) \\ \Large \lambda \in[0,1]\ \ \ (8)

Из(6)видно, что мы делаем предположение о том, что условные плотности имеют нормальное распределение, т.е. X \mid H_{0} \sim \mathcal{N}\left(0, \sigma^{2}\right) и X \mid H_{1} \sim \mathcal{N}\left(1, \sigma^{2}\right) , где \mathcal{N}\left(\mu, \sigma^{2}\right) обозначение нормального распределения с математическим ожиданием \mu и дисперсией \sigma^{2} . Ранее мы обозначали _0, _1 как условное математическое ожидание случайной величины X . Исходя из (6) , получаем, что _0= [XH_0 ]=0 , а _1= [XH_1 ]=1 .

Из диапазона (7) мы можем понять, какой у нас диапазон дисперсии \sigma^2 . Для этого выразим из (5) \sigma :

\Large \begin{array}{c} S N R=10 \log _{10}\left(\frac{1}{\sigma^{2}}\right)=10 \log _{10}\left(\sigma^{-2}\right)=-2 \cdot 10 \log _{10} \sigma=-20 \log _{10} \sigma \\ -\frac{S N R}{20}=\log _{10} \sigma \\ \sigma=10^{-\frac{S N R}{20}} \ \ (9) \end{array}

Подставляя граничные точки отрезка из (7) , получаем:

\Large \begin{aligned} &\sigma \in\left[\left.10^{-\frac{S N R}{20}}\right|_{S N R=5},\left.10^{-\frac{S N R}{20}}\right|_{S N R=-1}\right]\\ &\sigma \in\left[10^{-\frac{5}{20}}, 10^{-\frac{-1}{20}}\right]\\ &\sigma \in\left[\sqrt[4]{\frac{1}{10}}, \sqrt[20]{10}\right] (10)\end{aligned}

Зададим вектор значений SNR для построения ROC-кривой для каждого из них:

\Large \overrightarrow{{S N R}_{\text {values }}}=(-1,0.5,1,1.5,2,2.5,3,3.5,4,4.5,5)^{T} \text { (11) }

Шаг изменения значений вектора (11) возьмем равным \scriptsize \frac{1}{2} , т.е. \small _{SNR}=\frac{1}{2} . Определим теперь ROC-кривую как параметрическую функцию P_d от P_{fa} , где в качестве параметра выступает [0,1] . Из (3) и (6) , получаем:

\Large \text { ROC }_{\text {curve }}(\sigma, \lambda)=\left\{ \begin{array}{r} P_{f a}= \displaystyle\frac{1}{\sqrt{2 \pi \sigma^{2}}} \displaystyle \int_{\lambda}^{+\infty} e^{-\frac{x^{2}}{2 \sigma^{2}}} d x \\ P_{d}= \displaystyle\frac{1}{\sqrt{2 \pi \sigma^{2}}} \displaystyle \int_{\lambda}^{+\infty} e^{-\frac{(x-1)^{2}}{2 \sigma^{2}}} d x \end{array} \right. (12)

\sigma задает конкретную ROC-кривую из семейства ROC-кривых.

Зададим теперь вектор значений :

\Large \overrightarrow{\lambda_{\text {values }}}=(0,0.01,0.02, \ldots, 0.98,0.99,1)^{T} (13)

Шаг изменения значений вектора (13) возьмем равным \small \frac{1}{100} , т.е. \small _=\frac{1}{100} . Вектор (13) содержит 101 значение, т.е. имеем 101 точку для каждого графика. Таким образом, графики будут визуально выглядеть гладкими.

Имеющихся данных достаточно для построения ROC-кривых.

Воспользуемся для этого языком Python.

Подключение библиотек
# подключение дополнительных библиотекfrom scipy.stats import normfrom scipy.misc import derivativeimport numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns; sns.set()%matplotlib inline
Дополнительные функции и начальные условия
# зададим вектор SNR и lambdaSNR_values = np.arange(-1, 5.5, 1/2) lambda_values = np.arange(0, 1.01, 1/100) # функция, которая возвращает значение sigma по заданному значению SNRdef snr_to_sigma(SNR):    return np.power(10, -SNR/20)  # функция, которая возвращает значения Pfa и Pd по заданным sigma и lambdadef roc_curve(sigma, lambda_):    return 1 - norm.cdf(lambda_/sigma), 1 - norm.cdf((lambda_ - 1)/sigma)# создание DataFrame в котором будут храниться значения Pfa, Pd, SNRdata = []for SNR in SNR_values:    for lambda_ in lambda_values:        Pfa, Pd = roc_curve(snr_to_sigma(SNR), lambda_)        data.append([Pfa, Pd, str(SNR)])        data = pd.DataFrame(data, columns=['Pfa', 'Pd', 'SNR'])
Код для построения графика
fig, ax = plt.subplots(figsize=(18, 14))sns.set_context('poster')plt.title('$ROC$-кривые в зависимости от значения $SNR$', fontsize=40)plt.xlabel('$P_{fa}$', fontsize=40)plt.xticks(np.arange(0, 0.7, 0.05), fontsize=30)plt.yticks(np.arange(0.5, 1, 0.05), fontsize=30)plt.ylabel('$P_d$', fontsize=40, rotation=0, labelpad=40)sns.lineplot(x='Pfa', y='Pd', hue='SNR',              data=data, palette='gist_ncar', ax=ax)ax.annotate("Возрастание $\lambda$", xy=(0.15, 0.81),  xycoords='data',            xytext=(90, 150), textcoords='offset points',            size=30, ha='left',             arrowprops=dict(arrowstyle="->", color='black',                            connectionstyle="arc3,rad=0.1"))plt.grid(color='black', linestyle='--', linewidth=1, alpha=0.3)plt.legend(fontsize='small', shadow=True, title='$SNR(dB)$',           borderpad=0.9, fancybox=True);
Рис. 5 ROC-кривые в зависимости от значения SNRРис. 5 ROC-кривые в зависимости от значения SNR

Из графика видно следующее:

  1. Все кривые начинают свое движение с линии P_{fa}=0.5 и заканчивают на линии P_d=0.5 ;

  2. Чем больше значение SNR , тем ближе ROC-кривая к точке (0,1) ;

  3. Все кривые выпуклы вверх;

  4. ROC - кривая монотонно не убывает. Чем выше лежит кривая, тем лучше качество РЛС.

Первое объясняется ограниченностью значения порога детектирования (8) . Посмотрим, как будут выглядеть ROC-кривые, если увеличить диапазон , например, до [-10,10] .

Дополнительный код
# создание DataFrame в котором будут храниться значения Pfa, Pd, SNRdata2 = []for SNR in SNR_values:    for lambda_ in np.arange(-10, 10.1, 1/10) :        Pfa, Pd = roc_curve(snr_to_sigma(SNR), lambda_)        data2.append([Pfa, Pd, str(SNR)])        data2 = pd.DataFrame(data2, columns=['Pfa', 'Pd', 'SNR'])
Код для построения графика
fig, ax = plt.subplots(figsize=(18, 14))sns.set_context('poster')plt.title('$ROC$-кривые в зависимости от значения $SNR$', fontsize=40)plt.xlabel('$P_{fa}$', fontsize=40)plt.xticks(np.arange(0, 1.05, 0.1), fontsize=20)plt.yticks(np.arange(0, 1.05, 0.1), fontsize=20)plt.ylabel('$P_d$', fontsize=40, rotation=0, labelpad=40)sns.lineplot(x='Pfa', y='Pd', hue='SNR',              data=data2, palette='gist_ncar', ax=ax)ax.annotate("Возрастание $\lambda$", xy=(0.15, 0.81),  xycoords='data',            xytext=(90, 110), textcoords='offset points',            size=20, ha='left',             arrowprops=dict(arrowstyle="->", color='black',                            connectionstyle="arc3,rad=0.1"))plt.grid(color='black', linestyle='--', linewidth=1, alpha=0.3)plt.legend(fontsize='small', shadow=True, title='$SNR(dB)$',           borderpad=0.9, fancybox=True);
Рис. 6 ROC-кривые в зависимости от значения SNR c увеличенным диапазоном .Рис. 6 ROC-кривые в зависимости от значения SNR c увеличенным диапазоном .

Второе объясняется тем, что можно достичь большего значения P_d при меньшем значении P_{fa} . Это происходит потому, что при увеличении значения SNR , уменьшается значение , что видно из (9) . Посмотрим, как визуально изменяются кривые условных плотностей (6) при разных значениях SNR .

Дополнительный код
# функция, которая возвращает значение условных плотностей в зависимости от sigma def conditional_density(x, sigma):    return norm.pdf(x/sigma), norm.pdf((x - 1)/sigma)      # создание DataFrame в котором будут храниться значения условных плотностей и SNRdata3 = []x_range = np.linspace(-5, 5, 100)for SNR in SNR_values:    for x in x_range :        cond_dens1, cond_dens2 = conditional_density(x, snr_to_sigma(SNR))        data3.append([cond_dens1, cond_dens2, str(SNR), x])        data3 = pd.DataFrame(data3, columns=['cond_dens1', 'cond_dens2', 'SNR', 'x'])
Код для построения графика
fig, ax = plt.subplots(figsize=(20, 10))sns.set_context('poster')plt.title('Условные распределения в зависимости от значения $SNR$',           fontsize=30)plt.xlabel('$x$', fontsize=40)plt.xticks(np.arange(-5, 5.5, 0.5), fontsize=20)plt.yticks(np.arange(0, 0.45, 0.05), fontsize=20)plt.ylabel('Значение условной плотности', fontsize=20,            labelpad=30)sns.lineplot(x='x', y='cond_dens2', hue='SNR',              data=data3, palette='gist_ncar', ax=ax)sns.lineplot(x='x', y='cond_dens1', hue='SNR',              data=data3, palette='gist_ncar', ax=ax, legend=False)ax.legend(fontsize='small', shadow=True, title='$SNR(dB)$',           borderpad=0.9, fancybox=True, loc='upper left')ax.annotate("$f_{X|H_0}(x|H_0)$", xy=(-0.6, 0.35),  xycoords='data',            xytext=(-90, 20), textcoords='offset points',            size=30, ha='right',             arrowprops=dict(arrowstyle="->", color='black',                            connectionstyle="arc3,rad=0.1"))ax.annotate("$f_{X|H_1}(x|H_1)$", xy=(1.6, 0.35),  xycoords='data',            xytext=(100, 20), textcoords='offset points',            size=30, ha='left',             arrowprops=dict(arrowstyle="->", color='black',                            connectionstyle="arc3,rad=0.1"))plt.grid(color='black', linestyle='--', linewidth=1, alpha=0.3);
Рис. 7 Условные распределения (6) в зависимости от SNRРис. 7 Условные распределения (6) в зависимости от SNR

По Рис. 7 видно, что при увеличении SNR , кривые становятся уже, а, значит, пересекаются в меньшей степени. Посмотрим теперь на зависимость вероятности обнаружения P_d от :

Дополнительный код
data4 = []for SNR in SNR_values:    for lambda_ in lambda_values:        Pfa, Pd = roc_curve(snr_to_sigma(SNR), lambda_)        data4.append([Pfa, Pd, str(SNR), lambda_])        data4 = pd.DataFrame(data4, columns=['Pfa', 'Pd', 'SNR', 'lambda'])
Код для построения графика
fig, ax = plt.subplots(figsize=(16, 12))sns.set_context('poster')plt.title('Кривые $P_d$ от $\lambda$ при разных $SNR$', fontsize=40)plt.xlabel('$\lambda$', fontsize=40)plt.xticks(np.arange(0, 1.05, 0.1), fontsize=20)plt.yticks(np.arange(0.5, 1.05, 0.1), fontsize=20)plt.ylabel('$P_d$', fontsize=40, rotation=0, labelpad=40)sns.lineplot(x='lambda', y='Pd', hue='SNR',              data=data4, palette='gist_ncar', ax=ax)ax.annotate("Возрастание $\lambda$", xy=(0.5, 0.85),  xycoords='data',            xytext=(-10, 50), textcoords='offset points',            size=20, ha='right',             arrowprops=dict(arrowstyle="->", color='black',                            connectionstyle="arc3,rad=-0.2"))plt.grid(color='black', linestyle='--', linewidth=1, alpha=0.3)plt.legend(fontsize='small', shadow=True, title='$SNR(dB)$',           borderpad=0.9, fancybox=True);
Рис. 8 Кривые зависимости P_d от при различных значениях SNRРис. 8 Кривые зависимости P_d от при различных значениях SNR

P_d достигает максимального значения при =0 и SNR=5 . Но при таком низком пороге детектирования мы получаем:

Код для построения графика
fig, ax = plt.subplots(figsize=(16, 12))sns.set_context('poster')plt.title('Кривые $P_{fa}$ от $\lambda$ при разных $SNR$', fontsize=40)plt.xlabel('$\lambda$', fontsize=40)plt.ylabel('$P_{fa}$', fontsize=40, rotation=0, labelpad=40)sns.lineplot(x='lambda', y='Pfa', hue='SNR',              data=data4, palette='gist_ncar', ax=ax)ax.annotate("Возрастание $\lambda$", xy=(0.5, 0.35),  xycoords='data',            xytext=(-10, 90), textcoords='offset points',            size=30, ha='right',             arrowprops=dict(arrowstyle="->", color='black',                            connectionstyle="arc3,rad=0.2"))plt.grid(color='black', linestyle='--', linewidth=1, alpha=0.3)plt.legend(fontsize='small', shadow=True, title='$SNR(dB)$',           borderpad=0.9, fancybox=True);
Рис. 9 Кривые зависимости P_{fa} от при различных значениях SNR.Рис. 9 Кривые зависимости P_{fa} от при различных значениях SNR.

При =0 получается, что вероятность ложной тревоги равна \small \frac{1}{2} , так как определенный интеграл от условной плотности распределения

\large \left.\frac{1}{\sqrt{2 \pi \sigma^{2}}} \int_{\lambda}^{+\infty} e^{-\frac{x^{2}}{2 \sigma^{2}}} d x\right|_{\lambda=\eta_{0}}

считается от значения математического ожидания до + , что в точности равно \small \frac{1}{2} , в силу симметричности плотности нормального распределения.

Третье объясняется тем, что тангенс угла наклона ROC-кривой в некоторой ее точке равен значению плотностей (6) от порога детектирования , необходимому для достижения P_d и P_{fa} в этой точке.

Пусть

\Large \tan \left(\alpha_{\lambda}\right):=\frac{\left(\frac{d P_{d}}{d \lambda}\right)}{\left(\frac{d P_{f a}}{d \lambda}\right)} \ \ ,(14)

тогда:

\Large \begin{aligned} &\tan \left(\alpha_{\lambda}\right)= \frac{\frac{d}{d \lambda}\left(\frac{1}{\sqrt{2 \pi \sigma^{2}}} \displaystyle \int_{\lambda}^{+\infty} e^{-\frac{(x-1)^{2}}{2 \sigma^{2}}} d x\right)}{\frac{d}{d \lambda}\left(\frac{1}{\sqrt{2 \pi \sigma^{2}}} \displaystyle \int_{\lambda}^{+\infty} e^{-\frac{x^{2}}{2 \sigma^{2}}} d x\right)}=\frac{-\frac{1}{\sqrt{2 \pi \sigma^{2}}} e^{-\frac{(\lambda-1)^{2}}{2 \sigma^{2}}}}{-\frac{1}{\sqrt{2 \pi \sigma^{2}}} e^{-\frac{(\lambda)^{2}}{2 \sigma^{2}}}}=\\ &=\frac{e^{-\frac{(\lambda-1)^{2}}{2 \sigma^{2}}}}{e^{-\frac{(\lambda)^{2}}{2 \sigma^{2}}}}=e^{-\frac{(\lambda-1)^{2}}{2 \sigma^{2}}+\frac{(\lambda)^{2}}{2 \sigma^{2}}}=e^{\frac{-\lambda^{2}+2 \lambda-1+\lambda^{2}}{2 \sigma^{2}}}=e^{\frac{2 \lambda-1}{2 \sigma^{2}}} \ \ \ (15) \end{aligned}

Исследуем функцию (15) :

\Large \begin{array}{l} \displaystyle \lim _{\lambda \rightarrow-\infty}\left(\tan \left(\alpha_{\lambda}\right)\right)=\lim _{\lambda \rightarrow-\infty}\left(e^{\frac{2 \lambda-1}{2 \sigma^{2}}}\right)=0 \\ \displaystyle \lim _{\lambda \rightarrow+\infty}\left(\tan \left(\alpha_{\lambda}\right)\right)= \lim _{\lambda \rightarrow+\infty}\left(e^{\frac{2 \lambda-1}{2 \sigma^{2}}}\right)=+\infty \end{array} (16)

Из (15) и (16) следует, что тангенс угла наклона ROC-кривой монотонно изменяется от 0 до + при от - до + . Таким образом, начиная построение графика от =- \ tan(_ )=0 и, следовательно, _=0 . Заканчивается все в точке =+ , когда tan(_ )=+ , т.е. _=90 (касательная в данной точке перпендикулярна оси абсцисс).

Дополнительный код
# функция, которая возвращает значения Pfa и Pd по заданным sigma и lambdadef dif_roc_curve(sigma, lambda_):    return (derivative(lambda x: 1 - norm.cdf(x/sigma), lambda_, dx=1e-10),           derivative(lambda x: 1 - norm.cdf((x - 1)/sigma), lambda_, dx=1e-10))data5 = []for SNR in SNR_values:    for lambda_ in [0, 0.5, 1]:        dPfa, dPd = dif_roc_curve(snr_to_sigma(SNR), lambda_)        Pfa, Pd = roc_curve(snr_to_sigma(SNR), lambda_)        tan = dPd/dPfa        for i in np.arange(0.01/tan, 0.2/tan, 0.01/tan):            data5.append([tan*(i - Pfa) + Pd, i, str(SNR), lambda_])        data5 = pd.DataFrame(data5, columns=['y', 'x', 'SNR', 'lambda'])
Код для построения графика
fig, ax = plt.subplots(figsize=(18, 14))sns.set_context('poster')plt.title('$ROC$-кривая с $3^{мя}$ касательными', fontsize=40)plt.xlabel('$P_{fa}$', fontsize=40)plt.xticks(np.arange(0, 1.05, 0.1), fontsize=20)plt.yticks(np.arange(0, 1.05, 0.1), fontsize=20)plt.ylabel('$P_d$', fontsize=40, rotation=0, labelpad=40)sns.lineplot(x='Pfa', y='Pd', hue='SNR', legend=False,             data=data[data['SNR']  == '5.0'], palette='gist_ncar', ax=ax)sns.lineplot(x='x', y='y', hue='lambda', linestyle='--',             data=data5[data5['SNR']  == '5.0'],              palette='dark:b', legend=True,  ax=ax)plt.grid(color='black', linestyle='--', linewidth=1, alpha=0.3)plt.legend(fontsize='small', shadow=True, title='Касательная для $\lambda=$',           borderpad=0.9, fancybox=True, loc=4);

/

Рис. 10 ROC-кривая SNR=5 с тремя касательными в точках. Рис. 10 ROC-кривая SNR=5 с тремя касательными в точках.

На рис. 10 рассматриваются точки \left(P_{f a}(0), P_{d}(0)\right),\left(P_{f a}(0.5), P_{d}(0.5)\right),\left(P_{f a}(1), P_{d}(1)\right) .

Вывод

В ходе исследования были построены множество ROC-кривых на основе аналитического выражения (12) . Были также получены свойства ROC-кривых на основе графиков и аналитических выражений. То, каким образом будет выглядеть характеристика рабочего приемника, зависит от значения SNR , из которого однозначно определяется значение . Также область, в которой определена ROC-кривая, зависит от диапазона .

Использованная литература

  • Ван-Трис Гарри Л. Теория обнаружения, оценок и модуляции. Том 1. Теория обнаружения, оценок и линейной модуляции -Нью-Йорк, 1968, Пер, с англ. , под ред. проф. В. И. Тихонова. М., Советское радио, 1972, 744 с.

  • Тяпкин В.Н. Основы построения радиолокационных станции радиотехнических воиск: учебник / В.Н. Тяпкин, А.Н. Фомин, Е.Н. Гарин [и др.]; под общ. ред. В.Н. Тяпкина. Красноярск : Сиб. федер. ун-т. 2011. 536 с.

Дополнительно

Ссылка на github с исходным кодом.

Подробнее..

Интеграция PHP проекта на GitHub и Scrutinizer

13.01.2021 04:12:47 | Автор: admin

Регистрируемся в Scrutinizer

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

Для установки приложения Scrutinizer переходим по ссылке, этот шаг можно пропустить, но имейте ввиду, что в дальнейшем у вас не будут работать интерактивные плюшки и будет висеть нотификация: Scrutinizer GitHub App Is Not Installed...

Даем ему все скоупы, которые требует. Не бойтесь, Scrutinizer не удалит ваши репозитории и никак вам не навредит. Это нужно для того, чтобы приложение могло общаться с вашим GitHub по АПИ и в real-time управлять вашим Check Suite, давая ему обратную связь, и кодом в ваших PR для удобства ревью и тд.

Пример, как выглядит окно установки Scrutinizer

Создаем глобальную конфигурацию

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

Чтобы создать глобальную конфигурацию перейдите по ссылке.

Пример глобальной конфигурации для PHP проекта
build:    environment:        php: 7.3.15build_failure_conditions:  - 'project.metric_change("scrutinizer.quality", < -0.10)'  - 'elements.rating(<= D).exists'                                # No classes/methods with a rating of D or worse  - 'elements.rating(<= D).new.exists'                            # No new classes/methods with a rating of D or worse allowed  - 'issues.label("coding-style").exists'                         # No coding style issues allowed  - 'issues.label("coding-style").new.exists'                     # No new coding style issues allowed  - 'issues.severity(>= MAJOR).new.exists'                        # New issues of major or higher severity                          - 'project.metric("scrutinizer.quality", < 9)'                  # Code Quality Rating drops below 9  - 'patches.label("Doc Comments").exists'                        # No doc comments patches allowed  - 'patches.label("Spacing").exists'                             # No spacing patches allowedchecks:    php:        verify_property_names: true        verify_argument_usable_as_reference: true        verify_access_scope_valid: true        variable_existence: true        useless_calls: true        use_statement_alias_conflict: true        unused_variables: true        unused_properties: true        unused_parameters: true        unused_methods: true        unreachable_code: true        too_many_arguments: true        symfony_request_injection: true        switch_fallthrough_commented: true        sql_injection_vulnerabilities: true        simplify_boolean_return: true        security_vulnerabilities: true        return_in_constructor: true        return_doc_comments: true        return_doc_comment_if_not_inferrable: true        require_scope_for_methods: true        require_php_tag_first: true        remove_extra_empty_lines: true        property_assignments: true        properties_in_camelcaps: true        precedence_mistakes: true        precedence_in_conditions: true        phpunit_assertions: true        parse_doc_comments: true        parameters_in_camelcaps: true        parameter_non_unique: true        parameter_doc_comments: true        param_doc_comment_if_not_inferrable: true        overriding_private_members: true        overriding_parameter: true        non_commented_empty_catch_block: true        no_trait_type_hints: true        no_trailing_whitespace: true        no_short_variable_names:            minimum: '3'        no_short_open_tag: true        no_short_method_names:            minimum: '3'        no_property_on_interface: true        no_non_implemented_abstract_methods: true        no_long_variable_names:            maximum: '20'        no_goto: true        no_exit: true        no_eval: true        no_error_suppression: true        no_debug_code: true        naming_conventions:            local_variable: '^[a-z][a-zA-Z0-9]*$'            abstract_class_name: ^Abstract|Factory$            utility_class_name: 'Utils?$'            constant_name: '^[A-Z][A-Z0-9]*(?:_[A-Z0-9]+)*$'            property_name: '^[a-z][a-zA-Z0-9]*$'            method_name: '^(?:[a-z]|__)[a-zA-Z0-9]*$'            parameter_name: '^[a-z][a-zA-Z0-9]*$'            interface_name: '^[A-Z][a-zA-Z0-9]*Interface$'            type_name: '^[A-Z][a-zA-Z0-9]*$'            exception_name: '^[A-Z][a-zA-Z0-9]*Exception$'            isser_method_name: '^(?:is|has|should|may|supports)'        more_specific_types_in_doc_comments: true        missing_arguments: true        method_calls_on_non_object: true        instanceof_class_exists: true        foreach_usable_as_reference: true        foreach_traversable: true        fix_use_statements:            remove_unused: true            preserve_multiple: false            preserve_blanklines: false            order_alphabetically: false        fix_line_ending: true        fix_doc_comments: true        encourage_shallow_comparison: true        duplication: true        deprecated_code_usage: true        deadlock_detection_in_loops: true        comparison_always_same_result: true        code_rating: true        closure_use_not_conflicting: true        closure_use_modifiable: true        check_method_contracts:            verify_interface_like_constraints: true            verify_documented_constraints: true            verify_parent_constraints: true        catch_class_exists: true        call_to_parent_method: true        avoid_superglobals: true        avoid_length_functions_in_loops: true        avoid_entity_manager_injection: true        avoid_duplicate_types: true        avoid_closing_tag: true        assignment_of_null_return: true        argument_type_checks: true

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

Проверки для сборок
build_failure_conditions:  - 'project.metric_change("scrutinizer.quality", < -0.10)'  - 'elements.rating(<= D).exists'  - 'elements.rating(<= D).new.exists'   - 'issues.label("coding-style").exists'   - 'issues.label("coding-style").new.exists'                - 'issues.severity(>= MAJOR).new.exists'                                       - 'project.metric("scrutinizer.quality", < 9)'  - 'patches.label("Doc Comments").exists'  - 'patches.label("Spacing").exists' 

Хотел бы отметить, всегда указывайте ваше окружение (версию PHP, базы данных и тд), т.к. значения по умолчанию могут меняться и ваши сборки в один прекрасный день будут зафейлены. Что собственно и приключилось со мной буквально на днях, когда релизнулся PHP 8.0.1.

Настройка репозитория

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

Пример окна добавления репозитория

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

Далее идем в настройки вашего репозитория, которые находятся вот тут:
https://scrutinizer-ci.com/g/ваш-логин/название-репозитория/settings

Настройка Check Suite

Тут немного остановимся и я расскажу почему.

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

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

Tracking Settings

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

  • Pull-Request Tracking - отвечает за запуск сборок только для Pull-реквестов в основную ветку.

  • Pull-Request Notification - отвечает за то, как вы хотите узнавать о результатах сборки и анализа, например, через GitHub Check Suite.

  • Tracked Branches - отвечает за запуск сборок при пушах. Рекомендую, выставить опцию "Track only branches listed below" и указать вашу основную ветку.

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

Auto-Cancel Non-Finished Inspections

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

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

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

Настройка конфигурации репозитория

Переходим по ссылке:
https://scrutinizer-ci.com/g/ваш-логин/название-репозитория/settings/build-config

Важно выбрать вашу глобальную конфигурацию.

Пример, как задействовать глобальную конфигурацию
Пример конфигурации для проекта для Postgres
build:    nodes:        coverage:            services:                postgres: 12            tests:                override:                    -                        command: |                            sed -e "s/\${USERNAME}/scrutinizer/" \                                -e "s/\${PASSWORD}/scrutinizer/" \                                -e "s/\${DATABASE}/scrutinizer/" \                                -e "s/\${HOST}/127.0.0.1/" \                                phpunit.xml.dist > phpunit.xml                            ./vendor/bin/phpunit \                                --verbose  \                                --stderr  \                                --coverage-clover build/logs/clover.xml \                                --coverage-text                        coverage:                            file: build/logs/clover.xml                            format: clover        analysis:            tests:                override:                    - php-scrutinizer-run                    -                        command: phpcs-run                        use_website_config: true    cache:        disabled: true        directories:            - vendor/filter:    excluded_paths:        - 'tests/*'

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

phpcs.xml
<?xml version="1.0"?><ruleset>    <file>./</file>    <exclude-pattern>./vendor/*</exclude-pattern>    <exclude-pattern>./tests/*</exclude-pattern>    <exclude-pattern>./.github/*</exclude-pattern>    <rule ref="PSR1" /></ruleset>

А в ваш composer.json в секцию require-dev добавьте:

"squizlabs/php_codesniffer": "^3.5"

Начало работы

Теперь, давайте толкнем коммит в основную ветку и посмотрим, как выглядит Check Suite со Scrutinizer.

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

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

Интерактив от Scrutinizer в ревью

После интеграции и успешно пройденной сборки в Scrutinizer появится три кнопки: Code Intelligence, Issues и Coverage.

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

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

При наведении на методы и переменные Code Intelligence подсвечивает типы возвращаемых значений, а зеленые маркеры справа от нумератора строк сообщают о покрытии тестами.

В целом, это удобно, хотя я к Code Intelligence еще не привык.

Итог

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

Если у вас что-то не получилось с первого раза, не отчаивайтесь.

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

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

Подробнее..

Про самую реалистичную интерпретацию квантовой механики

18.06.2020 08:18:23 | Автор: admin

Мое внимание привлекла статья: Самая реалистичная интерпретация квантовой механики.


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


Давайте приступим к анализу содержимого.


Анализ


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

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


В 1967 году Конрад Цузе в книге "Вычисление пространства" высказал предположение, что

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


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

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


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


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

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


Для прода в квантовой механике сойдет и Копенгагенская интерпретация.

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


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

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


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


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


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


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


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

Если быть точным, то детерминированной. Слово детерминистичной просто калька с английского deterministic.


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


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


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


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

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


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

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


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


И дело может спасти грязный хак супердетерминизм.

Термин достаточно нов для меня. Поэтому будем разбираться.


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

Хочется понять, а чем детерминизм отличается от супердетерминизма? Почему он супер? В чем заключается его суперскость?


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

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


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

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


Состояние фактически реализуется, когда волновая функция равна 1, и оно не описывает наш мир, когда волновая функция равна нулю Именно такую "волновую функцию Вселенной" можно назвать онтологической. Любопытно, что онтологическая волновая функция выглядит как one-hot вектор, т.е. единица и куча нулей.

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


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


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


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


Именно простое математическое опровержение сводит на нет весь остальной текст этой статьи.


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


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

Грызинский дает вполне простой ответ на этот вопрос.


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

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


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

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


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

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


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

Квантовая механика ортодоксальный подход? Orthodox это общепринятый в данном контексте, но никак не ортодоксальный.


Как показывает практика, незаморачиваясь на конфликты с повседневным опытом и на вой философов, причитающих о крахе познания

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


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

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


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

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


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

А может и не принести.


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

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


где физические законы, в своих самых основных корнях, вовсе не являются квантово-механическими.

Для домашнего задания задам вопрос. Когда мы пишем уравнение Шредингера для атома водорода, мы пишем потенциальную энергию классического электрона как U=-1/r, при этом подразумевая, что электрон точечный и не размазан по вселенной. Как так? Неужели квантовая механика не такая квантовая и там содержатся допотопные классические элементы?


Заключение


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


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


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


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


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


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


Полезные ссылки для саморазвития


[1] Об атоме точно. Грызинский, лекции.
[2] Александр Чирцов о математике в физике, видеолекции.

Подробнее..

Из песочницы Анализ геймдизайна Hollow Knight. Часть 1. Забытое перепутье

17.06.2020 14:20:13 | Автор: admin


Привет! Я буду подразумевать, что если вы читаете это, то прошли Hollow Knight. Это позволит мне не описывать каждый пенек, а уделить больше времени важным вещам.

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

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

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

Your browser does not support HTML5 video.

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



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

Your browser does not support HTML5 video.

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

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

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



Здесь у игрока есть единственная тропка, по которой он пройдет в 100% случаев, все остальное является опциональным.

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


Храм черного яйца

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



В конце этажа первый серьезный враг самое время рассказать о том, как смерть влияет на игрока. Фактора тут два. Во-1, это наказание за поражение, так что игрок будет впредь стараться его избегать. А во-2, это отрицательное подкрепление, что должно заставить возвращаться к месту смерти. Вместе это создает цену навыкам игрока: в такой ситуации достижение цели будет гораздо приятнее.

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


Шахта

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

Your browser does not support HTML5 video.

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



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


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



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

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



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



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



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

Your browser does not support HTML5 video.

Ложный Рыцарь явно посложнее Матки Жужж, но все еще не должен доставить трудностей. Атаки медленные, сносят стандартную одну маску как при атаках, так и при сближении. Окна для хила огромные. Проблем с хитбоксами и телеграфированием нет. Если ХК умирает, то всего пару комнат и можно попытаться снова. Кстати, о последних трех вещах я буду говорить впредь, только если будут какие-то косяки. Единственная сложность босса в том, что на нем можно накапливать душу только при атаках самого опарыша, но не его брони.

Интересная деталь: как только босс в первый раз выполнит свою атаку после нока, левая сторона арены станет хлипкой и ее можно будет сломать. По словам разработчиков, это было сделано для тех людей, которым даже первого босса будет слишком трудно одолеть. И данный вариант возможность продолжить путешествие, и с новыми силами вернуться и попытаться вновь позже. Звучит интересно, поскольку добавляет вариативности, но есть ряд проблем. Для примера: я об этой возможности не знал ровно до тех пор, пока не прочёл о ней на вики. И также читал комментарии других людей, которые тоже понятия об этом не имели, так что проблема не единичная. Почему так? Во-первых, сама возможность не очевидна. До этого боя мы могли встретить всего 2 подобных энкаунтера, и из них выбраться живым было нельзя, не победив врага. Сами разрушаемые стены точно так же можно было встретить, но нет гарантии, что конкретный игрок будет о них знать, даже с учетом всех приложенных усилий. Так или иначе, разрушаемая стена арены первый подобный случай ( и, кстати, единственный ). Ну окей, скажем, можно было догадаться, ведь отчетливо видны трещины в стене, а также визуально это подчеркнуто отлетающими досками. Ладно, но что если игрок находится в другом конце арены? Также надо учитывать, что в этот момент его внимание будет сфокусировано на бое. Если сражаться будет слишком легко, то вы может и заметите эту деталь, но она вам не пригодится. А если сложно то скорее всего упустите, если только ради прикола в панике не начнете долбить по стенам, мол выпустите меня: вот в таком случае вас будет ждать приятный сюрприз. По какой-то причине атаки босса, если он прижмет игрока к стенке, не могут разрушить выход. Также странно, что не происходит никакого треска, хруста или чего подобного вместе с визуальным эффектом.

Your browser does not support HTML5 video.

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

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

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

Your browser does not support HTML5 video.

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

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



Весь ассортимент скупить не получится, так что придется выбирать. Если полностью пробежать Перепутье, при этом ничего не терять при смерти, а также усиленно не фармить, то в итоге будет примерно 1200 гео. Из которых игрок с крайне высокой вероятностью потратит 30 на карту, 220 на компас, 120 на перо, а также 50 на вокзал. Остается 780. Важно, что фармить в этой локации не очень-то приятно. Самый эффективный способ убивать оболочку стражника, из которого высыпается 45 гео. Так что допустим, что раз максимум 5 игрок может на него сходить, но потом всё равно заскучает.

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

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

Your browser does not support HTML5 video.

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

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



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

Итог


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

В следующий раз расскажу про Зеленую Тропу и Грибные Пустоши. Не забудьте написать свои мысли об этом материале в комментариях это поможет мне улучшить качество контента в будущем. Спасибо за внимание, пока./>
Подробнее..

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

12.02.2021 08:05:33 | Автор: admin

Сегодня OZON опубликовал данные опроса среди покупателей, посвященного дню всех влюбленных. Маркетплейс опросил несколько тысяч человек от 18 до 45 лет, проживающих в городах-миллионниках. Главный вывод - Валентина помнят, а родных - любят. 73% ответили, что будут отмечать 14 февраля. Еще во время опроса OZON не постеснялся уточнить какие подарки влюбленные считают ужасными. Мы проанализировали спрос на эти товары и узнали скольким придется смириться с носками и гелем для душа.

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

Неудачные подарки ко Дню всех влюблённых по мнению покупателей OZON:

- 18% опрошенных не хотели бы получить в качестве сюрприза валентинки, цветы, мягкие игрушки и носки;

- 10% респондентов не в восторге от конфет и сладостей;

- 5% ответивших против одежды и тапочек в качестве подарка;

- меньше всего - 4% опрошенных - отрицают гели для душа и дезодоранты в качестве презента.

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

Анализ спроса и выручки мы провели взяв за основу данные маркетплейса OZON. Площадка проводила опрос среди своих покупателей и будет правильным оценивать их поведение. Для сбора статистики мы использовали сервис аналитики маркетплейсов SellerFox.

Купаемся в деньгах

Возвращаемся от слов к делу. Изучаем данные категории Гели для душа. В 4% ответов респонденты заявили OZON, что не хотят получать такой подарок на 14 февраля. Мы тоже не хотели бы, но график подсказывает, что выбирать не придется. С начала января кривые спроса и выручки стремиться вверх.Продажи просели лишь однажды, когда продавцы резко подняли цены. Уверены, в скором будущем, большие цены трансформируются в гигантские скидки.

данные сервиса аналитики SellerFox в категории "Гели для душа" маркетплейса OZON, период с 12.01 - 11.02.2021данные сервиса аналитики SellerFox в категории "Гели для душа" маркетплейса OZON, период с 12.01 - 11.02.2021

В начале января дневная выручка от продажи гелей для душа составляла 500-600 тысяч рублей, а сегодня приблизилась к 1 000 000 рублей. За неделю с 4 по 9 февраля категория принесла селллерам почти 4 миллиона рублей.

данные сервиса аналитики SellerFox в категории "Гели для душа" маркетплейса OZON, период с 04.02-11.02.2021данные сервиса аналитики SellerFox в категории "Гели для душа" маркетплейса OZON, период с 04.02-11.02.2021

Если интересно, какой продавец заработал на гелях для душа больше, знайте - это сам OZON. За месяц площадка получила от продажи таких товаров 7 733 534 рубля. Из них почти 2 миллиона маркетплейс сделал за последние 7 дней - в 2 раза больше, чем доход от аналогичных товаров в первую неделю января.

данные сервиса аналитики SellerFox в категории "Гели для душа" OZON, срез по продавцам, период с 12.01-11.02.21данные сервиса аналитики SellerFox в категории "Гели для душа" OZON, срез по продавцам, период с 12.01-11.02.21

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

самый популярный товар на OZON в категории "Гели для душа" OZON, период с 12.01-11.02, данные SellerFoxсамый популярный товар на OZON в категории "Гели для душа" OZON, период с 12.01-11.02, данные SellerFox

Штопаем дырки в бюджете

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

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

На самом деле, два миллиона в день на носках - это не шутки, а наглядная статистика. А еще посмотрите - в этой гонке OZON не добрался до первого места и заработал за месяц лишь 1 531 806 рублей. У лидера в кошельке оказалось 12 574 064 рубля.

Кстати, топ товаров среди мужских носков выглядит объяснимо. Посмотрите: покупатели отдают предпочтение комплектам товаров. Да, пусть такие носки стоят от 2 до 6 тысяч рублей, зато штопать их точно не нужно. Будем считать, что так выглядят "народные" инвестиции.

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

данные сервиса SellerFox в категории "Женская одежда-Чулки, носки, колготки" маркетплейса OZONданные сервиса SellerFox в категории "Женская одежда-Чулки, носки, колготки" маркетплейса OZON

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

Кстати, OZON в этой категории снова не победил. В анализируемой нише больше всего выручки получил "Декатлон" - 1 947 876 рублей. Его ближайший конкурент заработал чуть больше 1,5 млн. рублей, а сам маркетплейс всего 882 551 рубль. Ну что, поможем OZON и подарим носки вторым половинкам?

данные сервиса SellerFox в категории "Чулки, носки, колготки" OZON, срез по продавцам, период с 12.01-11.02.21данные сервиса SellerFox в категории "Чулки, носки, колготки" OZON, срез по продавцам, период с 12.01-11.02.21

Растаптываем выручку

Идем дальше: 5% опрошенных OZON заявили, что не хотели бы получить в подарок на День всех влюбленных тапочки. Были прецеденты? В нашей практике таких подарков не встречалось, потому проверить спрос на этот аксессуар интересно. Другое дело, что тапочки могут покупать не только для дома, но и, например, для поездки в больницу. Так что давайте просто проверим - есть ли деньги в этой категории товаров. Кстати, пока вы читаете эти строки, мы тоже не знаем ответа. Данные проанализируем сразу после того как поставим в следующем предложении точку. Сгораем от нетерпения.

данные сервиса SellerFox в категории "Мужская одежда-Домашняя обувь" маркетплейса OZON, период с 12.01 - 11.02данные сервиса SellerFox в категории "Мужская одежда-Домашняя обувь" маркетплейса OZON, период с 12.01 - 11.02

Анализировать будем сразу две категории, потому что "Тапочки" можно встретить как среди мужской, так и среди женской одежды. Смотрим на выборку товаров "Домашняя обувь", вложенную в большую категорию "Мужская одежда" - здесь продаются тапочки. Видно, что спрос на такие аксессуары не велик. Средняя дневная выручка продавцов за последний месяц составила меньше 100 тысяч рублей, а лидер продаж заработал с 12.01 по 11.02 всего 63 552 рубля. Взгляните на топовый товар - он не похож ни на подарок, ни на предмет больничного гардероба.

самый популярный товар на OZON в категории "Мужская одежда-Домашняя обувь", период с 12.01-11.02.21самый популярный товар на OZON в категории "Мужская одежда-Домашняя обувь", период с 12.01-11.02.21

Забавно, но маркетплейс вообще не борется за выручку в категории "Домашняя обувь" - на итоговом графике его едва можно найти. Давай посмотрим на аналогичную статистику продаж "Домашней обуви", входящей в категорию "Женская одежда". Среди популярных продавцов снова нет OZON, зато популярный товар в этой подкатегории заработал за месяц чуть больше - 87 210 рублей. И это при том, что продан он был в меньшем количестве, чем самые популярные мужские тапочки. В целом, женская версия этого уютного атрибута стабильно приносит продавцам больше денег. А еще она выглядит в разы эффектнее. Дарить вроде можно, но мы ажиотажного спроса не видим.

данные сервиса SellerFox в категории "Женская одежда-Домашняя обувь" маркетплейса OZON, период с 12.01 - 11.02данные сервиса SellerFox в категории "Женская одежда-Домашняя обувь" маркетплейса OZON, период с 12.01 - 11.02

Мягкий спрос

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

данные сервиса SellerFox в категории "Мягкие игрушки" маркетплейса OZON, период с 12.01 - 11.02данные сервиса SellerFox в категории "Мягкие игрушки" маркетплейса OZON, период с 12.01 - 11.02

"Мягкие игрушки" продаются в категории "Детские товары". Они стоят особняком от игрушек для мальчиков и девочек, да и вообще могли бы занять свое место среди взрослых товаров. Спрос на мягкие игрушки потрясающий и, очевидно, что не все эти товары предназначены для детей. Посмотрите, средние значения дневной выручки продавцов за последний месяц колеблются между 4 и 5 миллионами рублей. А что с топом продаж? Он совсем не похож на детскую игрушку - много ли вы знаете детей, которые увлечены Тоторо? Именно он принес продавцу за прошедшую неделю почти 5,2 млн. рублей. Да, спрос на него в последние дни подрос, но связанно ли это с днем всех влюбленных? Заметьте, в топе продаж нет никаких плюшевых мишек и сердец.

самый популярный товар на OZON в категории "Мягкие игрушки", период с 13.01-12.02.21, данные SellerFoxсамый популярный товар на OZON в категории "Мягкие игрушки", период с 13.01-12.02.21, данные SellerFox

Напоследок вновь сравним достижения OZON и его продавцов. С 13 января по 12 февраля в категории мягкой игрушки маркетплейс самостоятельно заработал чуть больше 1,2 млн. рублей. Лидер продаж сделал на плюшевых товарах, страшно представить - 68 000 000 рублей. А что если, ради шутки, представить будто OZON выдает за результаты опроса категории товаров в которых ему просто не очень везет?

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

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

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru