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

Учебный процесс в it

Наши уникальные бесплатные мастер-курсы Kubernetes, CLI tool для разработчиков Odo, Java в контейнерах и много книг

04.07.2020 00:19:48 | Автор: admin
Окей, мы инновационная ИТ-компания, а значит у нас есть разработчики и это хорошие разработчики, увлеченные своим делом.



А еще они проводят live streaming, и все вместе это называется DevNation.

Начни новое:



Строй:



Немного от HR:


  • Как просить повышения во время COVID-19
    Несмотря на то, что пандемия заставляет многие компании сокращать свои бюджеты, технические навыки необходимы как никогда. Используйте эти советы, чтобы доказать свою ценность и получить повышение заработной платы в неспокойное время.
  • 3 совета, чтобы избежать выгорания во время работы из дома
    Статья в Harvard Business Review с тремя надежными пунктами по борьбе с выгоранием, а еще советы для работодателей, менеджеров и коллег, которые хотят помочь.

Пообщаться:


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



Список ближайших тем:

  • Quarkus the black swan of Java
  • Helm for Developers
  • Supersonic Secure Java with Quarkus
  • Stream Processing with Quarkus, Kafka Streams and Knative
  • Securing Microservices
  • DevOps with Containers
  • Orchestrating microservices the cloud-native way

По-русски:


Подробнее..

XAPI и IMS Caliper. Или ADL против IMS?

02.07.2020 10:04:35 | Автор: admin
image

Появление xAPI (ADL) не было неожиданным событием. Очень продолжительное время велись обсуждения TinCan'а, огромное количество открытых форумов кипели при обсуждении новой спецификации. И только после достаточного обсуждения, ADL выпустила релиз спецификации. Затем, уже после практической работы многих компаний с xApi, появилась CMI5.

И тут появилась аналогичная спецификация IMS Global Learning Consortium под названием Caliper.
Заметное сходство между xAPI и Caliper побудило разработчиков и поставщиков контента прояснить различия в реализации одной или обеих спецификаций (обе из которых в настоящее время нацелены на стандартизацию).

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



Вот краткий ответ IMS (http://personeltest.ru/aways/www.imsglobal.org/initial-xapicaliper-comparison)

a) Caliper and xAPI have very different origins. The core xAPI is to enable any type of experience and evidence tracking, both electronic and physical performance and not limited to just web-based courses (as is the case for SCORM). Caliper is the manifestation of the IMS Learning Analytics Framework and the Sensor API and Metric Profile(s) are the first two components of that framework. xAPI and Caliper are NOT equivalent. Adoption should not be one-or-the-other, instead it is a horses-for-courses decision;

b) While both xAPI (Actor/Verb/Object) and Caliper (Actor/Action/Activity) use a data model based upon a triple statement structure there are considerable differences in the detailed structure and usage of the Object and Activity definitions. However, it should be possible for each specification to make use of the others Verb/Action;


Вот краткий ответ ADL (http://personeltest.ru/aways/adlnet.gov/news/2016/07/25/adl-experience-api-and-ims-caliper-discovery-review/)

As xAPI has matured, so too has a similar specification from the IMS Global Learning Consortium called Caliper. There are notable similarities between xAPI and Caliper, which has caused adopters and vendors to clarify implementation differences of one or both specifications (both of which are now targeting standardization). Both communities supporting xAPI and Caliper have expressed concerns about being able to cost-effectively support both specs, which led to inquiries to both ADL Initiative and IMS about whether alignment of the two would be possible.


xAPI (Actor / Verb / Object) и Caliper (Actor / Action / Activity) используют модель данных, основанную на структуре тройного оператора, существуют значительные различия в подробной структуре и использовании определений Object и Activity. Видимо Actor и Verb/Action совпадают, отличаются только Object/Activity?

Я достаточно давно работаю с xAPI, но Caliper мне не был знаком. Пришлось немного изучить документацию (http://personeltest.ru/aways/www.imsglobal.org/sites/default/files/caliper/v1p1/caliper-spec-v1p1/caliper-spec-v1p1.html и www.imsglobal.org/caliper/caliperv1p0/ims-caliper-analytics-implementation-guide)

Скажу сразу, я не нашел значительных лично для меня отличий. То что называется в xAPI statement (Activites) в Caliper называется Event.



image

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

The Caliper information model defines a number of metric profiles, each of which models a learning activity or a supporting activity that helps facilitate learning. A metric profiles raison detre is to encourage vocabulary standardization and re-use among application providers delivering complementary, albeit competing capabilities that collect learning activity data. Each profile provides a domain-specific set of terms and concepts that application designers and developers can draw upon to describe common user interactions in a consistent manner using a shared vocabulary. Annotating a reading, playing a video, taking a test, or grading an assignment submission represent a few examples of the many activities or events that Calipers metric profiles attempt to describe.

Think of each metric profile as a stand-alone, logical container, or collection of one or more Caliper events that together help describe a set of inter-related activities. Each Event type included in a metric profile place constraints on the various entities and actions that can be utilized to describe a learning activity. Vocabulary restrictions are outlined in each profile description under the following headings


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

С точки зрения механизма авторизации и хранения (LRS), разницы практически нет, отличие JSON в xApi и JSON-LD в Caliper для меня не существенно. т.е. и в этих вопросах разницы нет.

Давайте посмотрим примеры JSON xApi и Caliper
xApi
{
actor: {
name: Sally Glider,
mbox: mailto:sally@example.com
},
verb: {
id: adlnet.gov/expapi/verbs/completed,
display: { en-US: completed }
},
object: {
id: example.com/activities/hang-gliding-test,
definition: {
type: adlnet.gov/expapi/activities/assessment,
name: { en-US: Hang Gliding Test },
description: {
en-US: The Solo Hang Gliding test, consisting of a timed flight from the peak of Mount Magazine
},
extensions: {
example.com/gliderClubId: test-435
}
}
},
result: {
completion: true,
success: true,
score: {
scaled: 0.95
},
extensions: {
example.com/flight/averagePitch: 0.05
}
},
context: {
instructor: {
name: Irene Instructor,
mbox: mailto:irene@example.com
},
contextActivities:{
parent: { id: example.com/activities/hang-gliding-class-a }
grouping: { id: example.com/activities/hang-gliding-school }
},
extensions: {
example.com/weatherConditions: rainy
}
},
timestamp: 2012-07-05T18:30:32.360Z,
stored: 2012-07-05T18:30:33.540Z,
authority: {
name: Irene Instructor,
mbox: mailto:irene@example.com
}
}


Caliper
{
sensor: example.edu/sensors/1,
sendTime: 2018-11-15T11:05:01.000Z,
dataVersion: purl.imsglobal.org/ctx/caliper/v1p1,
data: [
{
"@context": purl.imsglobal.org/ctx/caliper/v1p1,
id: example.edu/users/554433,
type: Person,
dateCreated: 2018-08-01T06:00:00.000Z,
dateModified: 2018-09-02T11:30:00.000Z
},
{
"@context": purl.imsglobal.org/ctx/caliper/v1p1,
id: example.edu/terms/201801/courses/7/sections/1/assess/1?ver=v1p0,
type: Assessment,
name: Quiz One,
items: [
{
id: example.edu/terms/201801/courses/7/sections/1/assess/1/items/1,
type: AssessmentItem
},
{
id: example.edu/terms/201801/courses/7/sections/1/assess/1/items/2,
type: AssessmentItem
},
{
id: example.edu/terms/201801/courses/7/sections/1/assess/1/items/3,
type: AssessmentItem
}
],
dateCreated: 2018-08-01T06:00:00.000Z,
dateModified: 2018-09-02T11:30:00.000Z,
datePublished: 2018-08-15T09:30:00.000Z,
dateToActivate: 2018-08-16T05:00:00.000Z,
dateToShow: 2018-08-16T05:00:00.000Z,
dateToStartOn: 2018-08-16T05:00:00.000Z,
dateToSubmit: 2018-09-28T11:59:59.000Z,
maxAttempts: 2,
maxScore: 15.0,
maxSubmits: 2,
version: 1.0
},
{
"@context": purl.imsglobal.org/ctx/caliper/v1p1,
id: example.edu,
type: SoftwareApplication,
version: v2
},
{
"@context": purl.imsglobal.org/ctx/caliper/v1p1,
id: example.edu/terms/201801/courses/7/sections/1,
type: CourseSection,
academicSession: Fall 2018,
courseNumber: CPS 435-01,
name: CPS 435 Learning Analytics, Section 01,
category: seminar,
subOrganizationOf: {
id: example.edu/terms/201801/courses/7,
type: CourseOffering,
courseNumber: CPS 435
},
dateCreated: 2018-08-01T06:00:00.000Z
},
{
"@context": purl.imsglobal.org/ctx/caliper/v1p1,
id: urn:uuid:c51570e4-f8ed-4c18-bb3a-dfe51b2cc594,
type: AssessmentEvent,
actor: example.edu/users/554433,
action: Started,
object: example.edu/terms/201801/courses/7/sections/1/assess/1?ver=v1p0,
generated: {
id: example.edu/terms/201801/courses/7/sections/1/assess/1/users/554433/attempts/1,
type: Attempt,
assignee: example.edu/users/554433,
assignable: example.edu/terms/201801/courses/7/sections/1/assess/1?ver=v1p0,
count: 1,
dateCreated: 2018-11-15T10:15:00.000Z,
startedAtTime: 2018-11-15T10:15:00.000Z
},
eventTime: 2018-11-15T10:15:00.000Z,
edApp: example.edu,
group: example.edu/terms/201801/courses/7/sections/1,
membership: {
id: example.edu/terms/201801/courses/7/sections/1/rosters/1,
type: Membership,
member: example.edu/users/554433,
organization: example.edu/terms/201801/courses/7/sections/1,
roles: [ Learner ],
status: Active,
dateCreated: 2018-08-01T06:00:00.000Z
},
session: {
id: example.edu/sessions/1f6442a482de72ea6ad134943812bff564a76259,
type: Session,
startedAtTime: 2018-11-15T10:00:00.000Z
}
},
{
"@context": purl.imsglobal.org/ctx/caliper/v1p1,
id: urn:uuid:dad88464-0c20-4a19-a1ba-ddf2f9c3ff33,
type: AssessmentEvent,
actor: example.edu/users/554433,
action: Submitted,
object: example.edu/terms/201801/courses/7/sections/1/assess/1?ver=v1p0,
generated: {
id: example.edu/terms/201801/courses/7/sections/1/assess/1/users/554433/attempts/1,
type: Attempt,
assignee: example.edu/users/554433,
assignable: example.edu/terms/201801/courses/7/sections/1/assess/1?ver=v1p0,
count: 1,
dateCreated: 2018-11-15T10:15:00.000Z,
startedAtTime: 2018-11-15T10:15:00.000Z,
endedAtTime: 2018-11-15T10:55:12.000Z,
duration: PT40M12S
},
eventTime: 2018-11-15T10:25:30.000Z,
edApp: example.edu,
group: example.edu/terms/201801/courses/7/sections/1,
membership: {
id: example.edu/terms/201801/courses/7/sections/1/rosters/1,
type: Membership,
member: example.edu/users/554433,
organization: example.edu/terms/201801/courses/7/sections/1,
roles: [Learner],
status: Active,
dateCreated: 2018-08-01T06:00:00.000Z
},
session: {
id: example.edu/sessions/1f6442a482de72ea6ad134943812bff564a76259,
type: Session,
startedAtTime: 2018-11-15T10:00:00.000Z
}
},
{
"@context": purl.imsglobal.org/ctx/caliper/v1p1,
id: urn:uuid:a50ca17f-5971-47bb-8fca-4e6e6879001d,
type: GradeEvent,
actor: {
id: example.edu/autograder,
type: SoftwareApplication,
version: v2
},
action: Graded,
object: {
id: example.edu/terms/201801/courses/7/sections/1/assess/1/users/554433/attempts/1,
type: Attempt,
assignee: example.edu/users/554433,
assignable: example.edu/terms/201801/courses/7/sections/1/assess/1?ver=v1p0,
count: 1,
dateCreated: 2018-11-15T10:15:00.000Z,
startedAtTime: 2018-11-15T10:15:00.000Z,
endedAtTime: 2018-11-15T10:55:12.000Z,
duration: PT40M12S
},
eventTime: 2018-11-15T10:57:06.000Z,
edApp: example.edu,
generated: {
id: example.edu/terms/201801/courses/7/sections/1/assess/1/users/554433/attempts/1/scores/1,
type: Score,
attempt: example.edu/terms/201801/courses/7/sections/1/assess/1/users/554433/attempts/1,
maxScore: 15.0,
scoreGiven: 10.0,
scoredBy: example.edu/autograder,
comment: auto-graded exam,
dateCreated: 2018-11-15T10:56:00.000Z
},
group: example.edu/terms/201801/courses/7/sections/1
}
]
}


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

Фраза
IMS Learning Analytics Framework and the Sensor API and Metric Profile(s) are the first two components of that framework
говорит о том, что видимо стоит ожидать появление Framework. Но информации по нему я не смог найти.

Я не знаю причин по которым две уважаемые организации представили, по моему личному мнению, сходные спецификации. Предыдущая история сосуществования SCORM (ADL) и IMS CP например показывала, что стандарты могут дополнять друг друга. В этот раз я не вижу такого дополнения.

Подробнее..

Распределенные имитационные системы

04.07.2020 12:05:52 | Автор: admin

Для возможности объединения отдельных имитаторов в распределенную систему имитации в настоящий момент используются следующие стандарты и технологии:
  • IEEE1516 (также заменяет HLA и DIS);
  • OPC;
  • CAPE-OPEN и другие отраслевые стандарты.

Наибольший интерес представляет стандарт IEEE 1516, т.к. данный стандарт напрямую относится к имитаторам, направлен на построение систем распределенной имитации (протоколы, рекомендованные методы управления и обратной связи, системная архитектура и т.д).
Семейство программных технологий OPC (OLE for Process Control) предоставляющих единый интерфейс для управления объектами автоматизации и технологическими процессами также представляет значительный интерес, но только в том случае, если необходима интеграция с объектами автоматизации и технологическими процессами. Стандарт CAPE-OPEN используется для взаимодействия имитаторов, разработанных специально для химической промышленности.

В области стандартизации моделирования и имитации значительный вклад внес Институт инженеров по электротехнике и электронике (IEEE). Распределенное моделирование (имитация) технология обмена данными между тренажерами по локальным или глобальным вычислительным сетям. Это позволяет обеспечить совместную работу отдельных имитаторов как одной управляемой системы моделирования или имитации. Концепция распределенного моделирования опирается на использовании высокоуровневой архитектуры (HLA). Практически стандарт IEEE 1516 определяет архитектуру путем использования единого API (программного интерфейса приложений). Отправными постулатами стандарта являются:
  1. простые монолитные имитационные модели не могут удовлетворить потребности профессиональных пользователей;
  2. все возможные сферы применения имитационного моделирования заранее неизвестны;
  3. должны быть предусмотрены возможности произвольного комбинирования отдельных имитаторов в сложные имитационные системы;
  4. архитектура распределенного моделирования должна быть максимально открыта для будущих технологий моделирования и имитации.


На данный IEEE 1516 является абсолютным стандартом для взаимодействия тренажеров и имитаторов в военных приложениях, что обусловлено жесткими требованиями совместимости с имитаторами, разрабатываемыми и используемыми Министерством обороны США и НАТО. В настоящее время IEEE 1516 находит все большее применение и в гражданской сфере, при разработке имитаторов для тренировки персонала сложных технических систем, в авиации, космонавтике, транспорте и т.д

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

Для создания сложных имитационных систем можно комбинировать использование IEEE 1516 и OPC, получая возможность использования реального оборудования и SCADA-систем (рисунок ), что может быть достаточно полезным во многих задачах.

Обеспечение связи стандартов IEEE 1516 (являющегося базовым для имитаторов) и OPC (применяемого в SCADA-системах) может быть реализовано, как напрямую в имитаторе, так и посредством посредника. Роль такого посредника, например у меня, выполняет пакет National Instruments LabView. LabView может поддерживать математические модели любой сложности, имеет встроенную поддержку OPC, может выступать в роли OPC-сервера, имеет эффективную поддержку взаимодействия с различными платами ввода вывода, что позволяет использовать необходимое оборудование напрямую, но не имеет, к сожалению, средств взаимодействия с IEEE 1516, что требует написания соответствующих программных компонентов.

В результате использования IEEE 1516 и OPC возможно создание относительно сложных распределенных систем имитации, включающих в себя множество имитаторов, реальное оборудование, SCADA-системы и т.д.

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

Организации, способные провести сертификацию:
  • США. The Department of Defense (DoD) Modeling and Simulation Coordination Office (M&S CO). Сайт: www.msco.mil
  • Франция. ONERA. (Office National dEtudes et Recherches Arospatiales) is the French national aerospace research center. Сайт: www.onera.fr
  • Швеция. Pitch Technologies AB. Сайт: www.pitch.se








Рассматрим вопросы построения распределенных имитационных систем на основе стандарта IEEE 1516. Базовые термины, используемые в информационном обеспечении, соответствуют терминологии стандарта на системы распределенной интерактивной имитации IEEE 1516 это федерация, федерат, объект, атрибут и интеракция. Понятие объекта определяется как модель отдельного явления реального мира. Объекты не имеют методов, а имеют только состояния (только структура данных без функций их обработки). Состояния объектов характеризуется фиксированным набором атрибутов точных значений, которые могут изменяться с течением времени. Каждый объект в любой момент времени характеризуется своим состоянием, которое определяется набором текущих значений его атрибутов. Федераты представляют собой математические описания поведения объектов имитационные модели, заданные программно (реализованные на директивном языке) или представленные значениями датчиков аппаратных средств. Фактически федератами могут быть как имитаторы, так и реальное оборудование или специальное программное обеспечение. Единственным требованием является обеспечение единого интерфейса для взаимодействия. Федераты могут управлять объектами, меняя (обновления) или получая (отображая) значения их атрибутов. В частности, пользователи имитаторов также являются федератами. Совокупность всех участвующих в имитационном моделировании федератов образует федерацию.

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

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


Рисунок. Иерархическая схема федерации

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


Рисунок. Общий механизм взаимодействия (RTI)


Рисунок. Общий механизм взаимодействия (RTI)


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

При создании распределенных имитационных систем, взаимодействующих через RTI, необходимо учитывать следующие важные особенности. Все элементы федератов и федерации должны быть документированы в определенных файлах (для описания федерации используются FOM (federation object model) файлы), федераты описываются в SOM-файлах (Simulation Object Model). Все данные хранятся только в федератах, RTI не хранит никаких данных, а только передает их. HLA позволяет в любой момент времени только одному федерату изменять значение какого либо атрибута (для передачи прав имеется специальый механизм управления правами). Федераты могут управлять локальным временем, в HLA используются различные внутренние механизмы управления временем (синхронизацией).

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


Рисунок. Блок-схема реализации базовых возможностей IEEE 1516

Более подробное изложение реализации сопряжено с необходимостью представления достаточно большого листинга программы, по этой причине, читатель может самостоятельно воспользоваться примерами программ, которые поставляются вместе с программным обеспечением для поддержки RTI. Достаточно простые примеры, содержащие множество комментариев, входят в состав библиотеки The Portico Project и свободно доступны на сайте porticoproject.org. Практически все коммерческие реализации стандарта также содержат в своем составе множество примеров.

В качестве примера можно рассмотреть следующую федерацию, состоящую из двух федератов: радиоуправляемая машина и пульт управления. Предположим, что управления осуществляется путем установки оборотов каждого из 4-х двигателей машины и поворота передних колес. На машине установлен датчик, определяющий расстояние до препятствия и передающий сигнал на пульт управления. Для этого необходимо определить два класса объектов, cYpravlenie для пульта управления и cDatchik для датчика дистанции. Атрибутами класса cYpravlenie являются wheel1, wheel2, wheel3, wheel4, wheel_angle. Атрибутом класса cDatchik является distance. Далее показан файл описания федерации, в формате HLA 1.3 (интеракции приведены как пример).

;; комментарий файл федерации (FED файл) для HLA 1.3

(Fed
(Federation Test)
(FedVersion v1.3)
(Federate fed Public)
(Spaces
(Space Geo
(Dimension X)
(Dimension Y)
)
)

(Objects
(Class cYpravlenie
(Attribute wheel1 reliable timestamp)
(Attribute wheel2 reliable timestamp)
(Attribute wheel3 reliable timestamp)
(Attribute wheel4 reliable timestamp)
(Attribute wheel_angle reliable timestamp)
)
(Class cDatchik
(Attribute distance reliable timestamp)
)
)

(Interactions
(Class reaction BEST_EFFORT RECEIVE
(Sec_Level Public)
(Parameter dx)
(Parameter dy)
(Parameter dz)
)
)

)

Далее, имитатор, представляющий управление создает федерат и объект, на основе класса cYpravlenie. Имитатор, представляющий машину, также создает федерат и объект, на основе класса cDatchik. Также федераты подписываются на интересующие их изменения, т.е. федерат-машина подписывается на получение данных объектов от класса cYpravlenie (т.е. на класс cYpravlenie), а федерат-управление на класс cDatchik. Таким образом машина получает изменения от пульта управления, а пульт получает данные от датчика в машине.

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


Рисунок. Структура федерации

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


Рисунок. Пример первого этапа определения связей

На следующем этапе происходит определение необходимого количества компьютеров и соответствующее распределение федератов. Например, федерат A будет функционировать на компьютере 1, федераты B, C, D будет функционировать на компьютере 2.


Рисунок. Распределение федератов по компьютерам.

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

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

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

Пример статистики по федерату:
RTIA: Statistics (processed messages)
Joined federation as car_federate
Synchronization point announced: ReadyToRun
Achieved sync point: ReadyToRun, waiting for federation
Federation Synchronized: ReadyToRun
Time Policy Enabled
Published and Subscribed
Add instance object: obj_datchik
Removing temporary file _RTIA_3033_ExampleFederation.fed on resign federation.
Resigned from Federation
Didn't destroy federation, federates still joined
List of federate initiated services
1 Message::CLOSE_CONNEXION (MSG#1)
1 Message::DESTROY_FEDERATION_EXECUTION (MSG#3)
1 Message::JOIN_FEDERATION_EXECUTION (MSG#4)
1 Message::RESIGN_FEDERATION_EXECUTION (MSG#5)
1 Message::SYNCHRONIZATION_POINT_ACHIEVED (MSG#10)
1 Message::PUBLISH_OBJECT_CLASS (MSG#28)
1 Message::SUBSCRIBE_OBJECT_CLASS_ATTRIBUTES (MSG#32)
1 Message::SUBSCRIBE_INTERACTION_CLASS (MSG#34)
1 Message::REGISTER_OBJECT_INSTANCE (MSG#40)
1708 Message::UPDATE_ATTRIBUTE_VALUES (MSG#41)
855 Message::TIME_ADVANCE_REQUEST (MSG#91)
3 Message::GET_OBJECT_CLASS_HANDLE (MSG#112)
6 Message::GET_ATTRIBUTE_HANDLE (MSG#114)
1 Message::GET_INTERACTION_CLASS_HANDLE (MSG#116)
120516 Message::TICK_REQUEST (MSG#141)
2564 Message::TICK_REQUEST_NEXT (MSG#142)
List of RTI initiated services
1 NetworkMessage::ANNOUNCE_SYNCHRONIZATION_POINT (MSG#13)
1 NetworkMessage::FEDERATION_SYNCHRONIZED (MSG#15)
1 NetworkMessage::DISCOVER_OBJECT (MSG#43)
1711 NetworkMessage::REFLECT_ATTRIBUTE_VALUES (MSG#45)
49 NetworkMessage::GET_FED_FILE (MSG#84)
Number of Federate messages: 125662
Number of RTIG messages: 1763
RTIA: Federate destroyed
TCP Socket 3: total = 122015 Bytes sent
TCP Socket 3: total = 340249 Bytes received
UDP Socket 4: total = 0 Bytes sent
UDP Socket 4: total = 0 Bytes received
Пример статистики по федерации в целом:
CERTI RTIG up and running
New federation: ExampleFederation
Looking for FOM file
Trying open_test.fed --> cannot access.
Now trying.../usr/local/share/federations/open_test.fed opened.

TCP Socket 7: total = 340400 Bytes sent
TCP Socket 7: total = 122015 Bytes received
UDP Socket 4: total = 0 Bytes sent
UDP Socket 4: total = 0 Bytes received
TCP Socket 6: total = 258616 Bytes sent
TCP Socket 6: total = 283044 Bytes received
UDP Socket 4: total = 0 Bytes sent
UDP Socket 4: total = 0 Bytes received


Синхронизация времени



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

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

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

Программные библиотеки для реализации RTI



Список доступных реализации HLA\IEE1516 доступен на странице en.wikipedia.org/wiki/Run-Time_Infrastructure. На сегодняшний день доступно достаточно большое количество реализаций, как коммерческих, так и не-коммерческих. Большинство из реализаций выполнены на языках JAVA и C++ (именно эти языки используются в стандарте), но также существуют реализации для MatLab, Питона (проект CERTI) и др.
При выборе библиотеки отдельное внимание следуют уделять сертификации на поддержку IEEE 1516. Как правило, все коммерческие реализации имеют сертификат, свободные не имеют (многие из свободных реализаций готовятся к такой сертификации).

Таблица Коммерческие реализации


Таблица Не-коммерческие реализации


Я лично для поддержки инфраструктуры распределенных приложений использую проект CERTI от ONERA (http://personeltest.ru/aways/savannah.nongnu.org/projects/certi).

Замеры скорости взаимодействия федератов через RTI



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

Для достижения минимальных временных задержек необходимо выбирать сервер с наименьшими временными задержками прохождения пакетов (можно проверить при помощи команды ping). В качестве примера рассмотрим работу одной из созданных в НИИ ЭОР ТюмГНГУ распределенных систем. Используется 100 мегабитная сеть (задержки ping'a < 0.231 ms), временная синхронизация отсутствует (для уменьшения задержек внутри RTI), 2 компьютера, сервер (rtig) запущен на одной из машин. Параметры федерации 2 объекта содержит по 5 атрибутов (по одному объекту на федерат/компьютер), взаимодействие между федератами двухстороннее. В результате обработки замеров получена зависимость количества взаимодействий в секунду от размера передаваемых данных.

Результаты таких замеры позволяют сделать множество выводов, например, если имитатор должен работать в заданном реальном времени, т.е. обновляться, например, не менее 60 раз в секунду, то за одно взаимодействие (для Fast Ethernet) должно передаваться не больше 300 килобайт (если например 5 атрибутов, то по 60 килобайт каждый). В тоже время, 300 килобайт данных, передаваемых 60 раз в секунду, также указывает на возможность использования RTI для передачи голосовых и видео данных между имитаторами, а также для взаимодействия с устройствами VR.

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

Применение более скоростных решений, таких как IpoIB (IP over InfiniBand, RFC 4392), 10G Ethernet, Myrinet-10G и др. позволит увеличить пропускную способность и значительно снизить задержки (существующие решения позволяют производить 30 миллионов взаимодействий в секунду и более).

Взаимодействие с реальными системами



В качестве федератов могут выступать не только математические модели объектов, т.е. искусственные системы, но и реальные системы и устройства. Примерами могут служить:
  • микрофон, предоставляющий звуковые данные;
  • видеокамера, предоставляющая видео-данные;
  • различные устройства ввода/вывода, например джойстики (рисунок ), принтеры и т.д.
  • различные датчики и управляющие механизмы, подключенные к компьютеру через платы АЦП/ЦАП;
  • реальное оборудования и SCADA-системы (рисунок 2.10.1., глава 1.4.1.) через промышленный интерфейс OPC;
  • Интерфейсы к рабочему столу реальной операционной системы, функционирующей на отдельном компьютере или виртуальной машине (рисунок );
  • устройств VR (глава 4.5.9.);
  • Интерфейс к базе данных и т.д.


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

Подробнее..

Почему оценка 4 может оказаться плохой, а 3 хорошей?

05.07.2020 10:11:35 | Автор: admin


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

Я достаточно часто слышу вопрос о том, почему я предпочитаю работать не с классической оценкой (1-5) или (0-100), а с целым набором (знания-умения-навыки), а еще обязательно использую степень переноса навыков на условия работы персонала.

Почему? Ответа будет два один простой, другой подробный)
Простой:
Представьте себе ситуацию, что обучение проходит 2 человека например оператор, который отвечает за работу целого комплекса оборудования и, например клиринговый персонал.

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

Почему это плохо?
Получается что оба где-то ошиблись? Причем оператор ошибся на 0,5, а уборщица на 1. А теперь зададим вопрос а к чему могут привести ошибки, которые стоят за этой единицей и 0,5 на реальном производстве? Уборщица забудет поставить знак осторожно, мокрый пол, кто-то с какой-то вероятностью подскользнется и с какой-то вероятностью получит травмы допустим. А что с оператором, с какой-то вероятностью он не сумеет (например) выполнить верные действия в случае возникновения аварийной ситуации и с некоторой вероятностью весь объект, например, взлетит на воздух. Что скрывает его недополученная половинка единица?
Получается 4+ у оператора смотрятся хуже чем 4 или даже 3 у уборщицы.
Вот по этой причине я стараюсь никогда не использовать классическую шкалу оценок при создании и эксплуатации тренажеров.

Я уже писал про управлении рисками (http://personeltest.ru/aways/habr.com/ru/post/508522/), а сейчас постараюсь пройтись по оценке и контролю необходимого уровня характеристик персонала

Основное допущение:
вероятность каждой ошибки персонала равна вероятности ошибки на имитаторе (тренажере), полностью идентичном реальной системе (системе достоверно воспроизводящей реальную)


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

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


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



Рисунок. Линейный и нелинейный алгоритм (схема выполнения действий персоналом)

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

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

Далее попытаемся раскрыть пункт 5



Рисунок. Схема составного элемента алгоритма задачи


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


Умения:
  • практически (использовать знания) выполнять задачу (с необходимой точностью в заданное время);


Навыки:
  • практически выполнять задачу (с необходимой точностью в заданное время в течении всей рабочей смены);


Например, формирование ЗУН алгоритмов выполнения работ испытание центробежных насосов (ГОСТ 6134-2007. Насосы динамические. Методы испытаний) может быть разделена на следующие задачи:
1. Обкатка насоса (агрегата)
2. Снятие напорной и энергетической характеристик
3. частоту вращения;
4. подачу насоса;
5. давление на входе и выходе из насоса или разность указанных давлений,
6. температуру перекачиваемой жидкости.
7. зависимость потребляемой мощности насоса и его КПД от подачи
8. Снятие кавитационной характеристики
9. Испытания насоса на самовсасывание
10. Обработка результатов испытаний

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


2. Условия проведения и принципы испытаний:
  • Условия определения показателей и характеристик
  • Условия проведения испытаний
  • Испытания на жидкостях, отличных от чистой холодной воды
  • Допустимые отклонения для насосов серийного производства с типовыми каталожными кривыми
  • Схемы испытательных установок (стендов)
  • Определение погрешностей
  • Метод измерения объема
  • Принцип измерения напора насоса


3. Последовательность проведения испытаний, оформление и представление результатов.

4. Определение показателей безопасности:
  • Электрическая безопасность
  • Термическая безопасность
  • Механическая безопасность
  • Прочие вредные производственные факторы (показатели)


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

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


Рисунок. Вид экрана имитатора Испытания центробежных насосов


Рисунок. Фото реальной установки

Метод (механизм) оценки формирования и переноса знаний, умений и навыков


Оценка сформированных в результате обучения знаний, умений и навыков



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

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



Рисунок. Оценка (измерение) знаний персонала (y=const)

Рисунок. Оценка (измерение) знаний персонала (y=f(t))

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


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



принимается, как было указано выше, что вероятность каждой ошибки персонала равна вероятности ошибки на имитаторе, полностью идентичном реальной системе (системе достоверно воспроизводящей реальную), т.е. (P=Pf). Если принять такую зависимость между уровнем характеристики (рассогласованием, величиной ошибки) и вероятностью ошибки персонала (P=Pf), тогда P=1- означает 100% вероятность появления ошибки, P=0 означает отсутствие возможности ошибки (0 %),P=0.5 соответствует 50% вероятности ошибки персонала. В ином случае (когда знания, умения и навыки не полностью переносятся на реальный объект, в силу различий имитатора и реальной системы) зависимость может быть задана выражением P=f(Pf).



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




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

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

Например, при проведении балансировки станка-качалки (УШГН) в количестве 5 штук, можно измерить насколько точно (правильно) персонал выполняет действия (качество балансировки) в зависимости от затраченного времени. В данном случае по оси Y откладывается значения % соответствия текущего уровня балансировки с принятой нормой.



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

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

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



Изменение вероятности ошибки персонала в течении времени рабочей смены при разных условиях. (значения умений в течении рабочей смены )

Днем (по опыту водителей таллинских такси) наиболее опасен период 11 15 ч. Соглафю данным шведских ученых, изучавших связь между ошибочными действиями рабочих и суточными ритмами, именно в эти часы у рабочих возникает больше всего ошибок. А словацкий ученый Ю. Куруц, который приводит эти данные, отмечает, что у водителей на эти часы дневного времени приходится наибольшее число случаев засыпания за рулем. В ночное же время более опасные с этой точки зрения часы от полуночи до 5 ч утра.




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

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

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



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

Перенос навыка


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

Основные принципы


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

Чем более сходны задания А и В, тем сильнее они влияют друг на друга. Будет ли перенос при этом положительным или отрицательным, зависит от того, как соотносятся между собой такие характеристики обоих заданий, как показ и контроль или стимул и реакция. Трехмерная поверхность Осгуда [47] представляет попытку суммировать результаты ранних работ по исследованию взаимосвязей между переносом и ретроакцией. Если и предъявляемые стимулы, и требуемая реакция в обоих заданиях столь схожи, что практически являются неразличимыми, то перенос, очевидно, будет максимальным. Во всех отношениях задания А и В представляют собой варианты одного и того же задания, так что изучение А эквивалентно изучению В.

Другие случаи, содержащиеся в табл. 9.5, можно проиллюстрировать на примере, взятом из обувной промышленности. Пусть задание А состоит в том, чтобы сделать на ботинке шов, состоящий из отдельных стежков (стимул), путем повторяющихся нажатий на педаль с нужной силой (реакция), а задание В в том, чтобы зажечь ряд неоновых ламп (стимул) путем повторяющихся нажатий на телеграфный ключ (реакция). В этих условиях как стимул, так и реакция у обоих заданий различны, и поэтому переноса стереотипа нет [56]. Однако, если попросить ранее обученную группу обувщиков зажигать ряд неоновых ламп путем нажатия обычной ножной педали, то реакция в обоих заданиях будет одинакова, хотя стимулы различны.
Поэтому произойдет положительный перенос; опытные обувщики лучше выполняют задание В в этом варианте, чем необученные лица.



Последний из представленных в таблице вариантов взаимосвязи более сложен для анализа, и поверхность Осгуда описывает его неточно. В нашем примере потребовать разной реакции на одинаковые стимулы означает попросить обувщиков делать стежки, нажимая на телеграфный ключ. Такая процедура может дать отрицательный перенос. В новой ситуации при прочих равных условиях человек обычно имеет тенденцию поступать так же, как в старой. Если условия изменились, но это изменение не является совершенно явным, то может произойти несоответствующая новым условиям старая реакция. В рассматриваемом примере опытные операторы швейной машины вместо серии легких нажатий на телеграфный ключ иногда могут пытаться давить на него длительно и с большим усилием. Но возможно также, что, несмотря на отдельные ошибки, опытные операторы в целом покажут лучшие успехи, чем необученная группа, благодаря общему подобию обоих заданий. Результат будет отчасти зависеть от того, каким образом выставляются баллы. В любом случае может оказаться и так, что по мере дальнейшего освоения задания В первоначально отрицательный перенос сменится положительным, так как ошибки будут становиться все реже.Важно не допустить отрицательного переноса с обучающего устройства, например тренажера, на реальные условия работы, но, к сожалению, нелегко предсказать, когда произойдет отрицательный перенос. Однако из работы [25], где сделана попытка прогнозирования навязчивых ошибок с помощью трехмерной поверхности, связывающей сходство стимулов и реакций с ожидаемыми характеристиками переноса, вытекает, что по мере увеличения степени сходства реакций интерференция между двумя заданиями усиливается. Являются ли такие случающиеся время от времени ошибки существенными, зависит от характера задания. При пошиве обуви случайная ошибка, обусловленная отрицательным переносом, может быть не важна, но при посадке самолета такая ошибка может привести к катастрофе. Подобные ошибки вероятнее всего могут возникать в тех случаях, когда реакции, требуемые в заданиях Л и В, легко перепутать. Обучаемые вряд ли спутают езду на велосипеде с наливанием кофе, даже если стимулом в обоих случаях является зеленый свет. Однако такие реакции, как поднятие и опускание рычага, поворот штурвала по часовой стрелке и против часовой стрелки, перепутать очень легко.

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



Однако перенос может не оставаться постоянным по мере изучения задания В, так что для контроля эффективности обучения могут потребоваться более гибкие методы оценки.
Какая-то чувствительная мера ценности, доставляемой при различных объемах подготовки, особенно нужна при использовании тренажеров, когда стоимость обучения и стоимость натурной практики обычно высоки, но известны и поддаются регулированию. Сами по себе тренажеры, степень их близости к реальным условиям и соответствующие характеристики переноса мы здесь не обсуждаем. Однако авиатренажер может служить хорошим примером освоения задания А, результаты которого должны быть перенесены на реальный полет задание В. Типичная задача состоит в том, чтобы определить, каков должен быть объем обучения на наземном тренажере до того,- как допустить новичков к полетам.
Наиболее полезными являются показатели, характеризующие экономию, или коэффициент замены. Эффективность переноса можно оценить количеством часов летнего времени, сэкономленных благодаря наземной подготовке в том или ином объеме. В работе [49] предложены дифференциальные и кумулятивные измерители такой эффективности. Если для достижения требуемых навыков нужно 10 летных часов, а в случае предварительного обучения пилота на тренажере в течение 1 ч понадобится только 8,6 летных часов, то экономия составляет 1,4 ч. Еще один час на тренажере, возможно, даст несколько меньшую экономию скажем, 1,2 ч, так что накопленная зко-номия после 2 ч на тренажере составит 2,6 ч. Деля эту величину на 2 (количество часов тренажа), получаем кумулятивный коэффициент эффективности переноса (ККЭП), равный 1,3 на час наземной подготовки. Соответствующую формулу можно записать так:





Как показывает рис. эффективность переноса, оцениваемая по этому показателю, как правило, монотонно снижается. При 5 ч подготовки на тренажере все еще будет требоваться 5 ч летного времени, и коэффициент переноса снизится до 1,0. Ясно, что с точки зрения суммарных затрат времени на подго-товку летчика дальнейшее увеличение тренажерного времени не имеет смысла. Если же критерием является стоимость, что вполне возможно в рассматриваемом примере, то может оказаться целесообразным продлить наземное обучение. Например, если 1 ч летного времени стоит в три раза дороже, чем 1 ч на тренажере, то выгодно продолжить наземную подготовку до тех пор, пока коэффициент эффективности не упадет до 0,33. 15 ч тренажерного времени плюс 5 ч летного обойдутся во столько же, что и 10 ч летного времени. Очевидно, в данном случае нужно просто выразить коэффициент эффективности переноса в единицах стоимости, а не времени обучения. Существуют и более сложные способы максимизации эффективности по стоимости, основанные на методах дифференциального исчисления
Более простой способ оценки эффективности обучения также показан на рис. В методе Л+В часы учебного времени (или число практических упражнений, или стоимость обучения) для задания Л складываются с такими же показателями, характеризующими требуемый после переноса объем обучения по заданию В, причем эта сумма вычисляется для каждого из возможных значений объема практики по заданию А. Как только суммарное значение показателя по обоим заданиям превысит его значение для одного лишь задания А, можно сделать вывод, что обучение стало неэкономичным. На графике это происходит в точке, где на каждое из заданий затрачивается по 5 ч, так как 5 ч тренажерного времени и 5 ч летного, очевидно, не дают никакой экономии по сравнению со стандартными 10 ч летного времени. Ясно, что эта граничная точка совпадает с той, которая определена с помощью коэффициента эффективности переноса.

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

Обнаружение. Диагностика. Принятие решений

06.07.2020 10:05:56 | Автор: admin
image
Продолжаю тему про ошибки персонала с точки зрения тренажеров (имитаторов) для обучения специалистов. Поскольку до сих пор многие специалисты в области обучения не видят существенной разницы между тестами и тренажерами, я постараюсь показать, так сказать глубины глубин этой проблемы.
Начнем, классификация ошибки в зависимости от ее положения в процессе деятельности персонала также широко представлена в множестве моделей процесса деятельности персонала. Как правило такие модели также сильно зависят от сферы применения, т.е. отрасли.
image
Человек оператор в системе с обратной связью
Далее будет рассматриваться одна из наиболее современных универсальных моделей, основанная на и показанная на рисунке. Выбор этой модели обусловлен наиболее мелким делением когнитивных и физических действий. Данная модель не противоречит другим моделям, и является как бы их обобщением.
image
Пример процесса деятельности персонала (модель поведения)

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

Подробно рассмотрим обнаружение, диагностику и принятие решений.

Обнаружение




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


В настоящее время существует статистика, наглядно демонстрирующая различные типы ошибок обнаружения человека для различных областей, например:
  • Котик М.А., Емельянов А.М. Природа ошибок человека-оператора на примерах управления транспортными средствами.
  • Пол Фиттс Инженерная психология и конструирование машин В книге: Экспериментальная психология (С. Стивенс, ред.), т.2, с 943.
  • Стрелков Ю.К.Инженерная и профессиональная психология. М.: Академия, 2005.


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

Таблица. Классификация 270 ошибок, сделанных пилотами при реагировании на сигналы и на показания приборов. [из книги Стрелков Ю.К. Инженерная и профессиональная психология]


Формирование знаний обнаружения (контроля)



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


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

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


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


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

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


Формирование умений обнаружения (контроля)



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

Формирование умений и обнаружения напрямую связано с вниманием. В когнитивной науке внимание понимается как контрольный механизм действия (внутренний контроль), а его формирование определяется обучением и тренировкой. В работе [Борис Митрофанович Величковский. КОГНИТИВНАЯ НАУКА Основы психологии познания Том 1, 304 с.] на основании множества исследований, указывается Формирование когнитивных навыков особенно сильно повышает успешность работы в условиях отвлечения внимания. Эти результаты позволяют надеяться на преодоление многих, казалось бы, фиксированных ограничений познавательных процессов при правильно построенных обучении и тренировке..

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

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

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

Особое внимание следует уделить следующим факторам (исходя их классификации ошибок [из книги Стрелков Ю.К. Инженерная и профессиональная психология]):
  1. Если имеются приборы, стрелка которых делает несколько оборотов необходимо отдельно отслеживать быстроту и точность считывания показаний этих приборов.
  2. Точности и скорости интерпретации приборов, показывающих скорость изменения величины меняется быстро или медленно и направление изменения возрастает или убывает.
  3. Точности и скорости интерпретации не стандартизированных сигналов (сигналы рукой например), и сигналов, которые зависят от условий (например сигнальные огни в тумане, звуки на фоне помех и т.д.).
  4. Точности и скорости интерпретации различения цифр, делений шкал или стрелок.
  5. Количеству обращений не по адресу, т.е. к приборам, на которых нет нужной информации.
  6. Признакам неработающего или неисправного прибора.
  7. Случаям не снятия показаний прибора в нужный момент времени.


Эффективность формирования умений обнаружения: см. эффективность формирование знаний обнаружения.

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

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

Формирование навыков обнаружения (контроля, реакции)


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

Процесс восприятия информации начинается с физиологической настройки системы восприятия на объект наблюдения (уровень безусловных рефлексов) и заканчивается этапом сознательного выбора и обработки информации на уровне мышления. Имеющиеся данные из области физиологии сенсорных систем и психологических исследований вопросов восприятия, указывают на то, что человек воспринимает информацию в первую очередь, используя свои доминирующие анализаторы (зрение, слух и кинестетические ощущения). Доминирующим анализатором является зрение, но в процессе восприятия (мозгом) зрительного образа участвует не только зрение, но и другие органы чувств. Как правило, под временем или продолжительностью реакции понимают общую продолжительность (overall response time). То, что мы ощущаем, только на 20% зависит от работы доминирующих анализаторов, и на 80% определяется способностью центральной нервной системы обрабатывать получаемую информацию.

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

Тестирование и тренировка динамических возможностей зрительной системы важна в силу двух основных причин:
1. Зрение человека не способно воспринимать непрерывно и одинаково четко по всему полю зрения. Для четкого восприятия в целом человек должен быстро зафиксировать взгляд в нескольких важных местах.
2. Мы видим всю картину с задержкой по времени на 0,15-0,2 сек, в связи с чем, необходимо освоить алгоритмы ведения взгляда и наладить связи между зрительным восприятием и мышечными реакциями для формирования подсознательных опережающих действий.


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

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

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

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

Имеющиеся данные исследований вопросов восприятия приводят к однозначным выводам:
  • Восприятие зрительной информации является осваиваемым процессом, а не дается нам от рождения полностью. Оно формируется и совершенствуется в процессе накопления жизненного опыта и определенных тренировок.
  • Люди, не освоившие правильные алгоритмы для восприятия быстро меняющейся обстановки, видят гораздо меньше деталей, в независимости от остроты зрения, которую они проверяют у окулиста.
  • Люди, освоившие алгоритм правильного ведения взгляда замечают больше особенностей и деталей окружения.
  • Если обстановка быстро меняется, многие моменты упускаются глазами, а панорамные снимки стыкуются в сознании не совсем точно. Натренированные люди, как правило, делают именно те фотографии, по которым возможен максимально точный прогноз, у начинающих важные места теряются между кадрами, ни какая усиленная работа головного мозга уже не может в таком случае восстановить упущенное.
  • Время распознавания объектов зависит от нашего предыдущего хранящегося в памяти опыта, и может сокращаться.
  • Тренировка, влияя исключительно на сенсорные процессы, сокращает продолжительность реакции на 4070%
  • Травис (1948) исследовал эффективность влияния, тренировочных упражнений на продолжительность реакции узнавания. Он пришел к выводу, что тренировка почти исключительно влияет на сенсорные процессы, сокращая {119} продолжительность реакции на 40%.
  • Гератеволь благодаря тренировке нашел, что продолжительность реакции уменьшается до 70%.



Рисунок. Последовательная подсветка индикаторов в имитаторе для отработки алгоритма правильного ведения взгляда



Ошибки восприятия и искажение информации


В большинстве случаев интерпретация информации поступающей от доминирующих анализаторов, является корректной, но иногда возникают ошибки восприятия. Наиболее известные иллюзии связаны со зрением, существуют ошибки в восприятии тактильных ощущений, звука и т.д. Зрительные иллюзии и феномены [http://www.psy.msu.ru/illusion/]:
  • Иллюзии восприятия глубины
  • Зрительные искажения
  • Иллюзии восприятия размера
  • Иллюзии цвета и контраста
  • Эффект последействия
  • Иллюзии движения (например, зрительные иллюзии, когда кажется, что ваша машина начинает двигаться назад, в тот момент, когда рядом стоящая машина медленно трогается)
  • Эффект перцептивной готовности и т.д.

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

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

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


На рисунке показана информация, получаемая пилотом во время пилотирования.



Формирование навыков обнаружения

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

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

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

Диагностика


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

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

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


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


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

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

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

Формирование умений диагностики


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

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


Соответственно, возможны следующие основные ошибки:
  • ошибочное определение возможных последствий;
  • ошибочное определение причин.


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


Формирование навыков диагностики


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

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

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

От того, насколько эффективно проведена диагностика, зависит правильность принятого решения.

Принятие решений


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


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


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

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

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

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

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

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


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

Действия при обнаружении а) проверить б) сообщить в) выполнить

Последовательность:
  • Постановка проблемы.
  • Формулировка ограничений и критериев принятия решения.
  • Определение альтернатив.
  • Оценка альтернатив.
  • Выбор альтернативы.
  • Реализация решения.
  • Контроль за исполнением решения.
Подробнее..

Перевод Учебный проект на Python интерфейс в 40 строк кода (часть 2)

03.07.2020 08:04:12 | Автор: admin
image

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

Streamlit


Streamlit это веб-фреймворк, предназначенный для исследователей данных для простого развертывания моделей и визуализаций с использованием Python. Это быстро и минималистично, а также красиво и удобно. Есть встроенные виджеты для пользовательского ввода, такие как загрузка изображений, ползунки, ввод текста и другие знакомые элементы HTML, такие как флажки и переключатели. Всякий раз, когда пользователь взаимодействует с потоковым приложением, сценарий python перезапускается сверху вниз, что важно учитывать при рассмотрении различных состояний вашего приложения.
Вы можете установить Streamlit с помощью pip:

pip install streamlit


И запустите streamlit в скрипте Python:

streamlit run app.py


Варианты использования


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

Во-первых, давайте создадим пользовательский интерфейс для загрузчика изображений и возможность использовать изображение по умолчанию. Мы можем добавить вывод текста, используя такие функции, как st.write() или st.title(). Мы храним динамически загруженный файл, используя функцию st.file_uploader(). Наконец, st.checkbox() вернет логическое значение в зависимости от того, установил ли пользователь флажок.

import streamlit as stimport cv2import matplotlib.pyplot as pltimport numpy as npimport mazest.title('Maze Solver')uploaded_file = st.file_uploader("Choose an image", ["jpg","jpeg","png"]) #image uploaderst.write('Or')use_default_image = st.checkbox('Use default maze')


Результат:

image

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

if use_default_image:    opencv_image = cv2.imread('maze5.jpg')elif uploaded_file is not None:    file_bytes = np.asarray(bytearray(uploaded_file.read()), dtype=np.uint8)    opencv_image = cv2.imdecode(file_bytes, 1)


Как только изображение загружено, мы хотим показать изображение, размеченное с начальной и конечной точками. Мы будем использовать ползунки, чтобы позволить пользователю переместить эти точки. Функция st.sidebar() добавляет боковую панель на страницу, а st.slider() принимает числово в пределах определенного минимума и максимума. Мы можем определить минимальное и максимальное значения слайдера динамически в зависимости от размера нашего изображения лабиринта.

if opencv_image is not None:    st.subheader('Use the sliders on the left to position the start and end points')    start_x = st.sidebar.slider("Start X", value= 24 if use_default_image  else 50, min_value=0, max_value=opencv_image.shape[1], key='sx')    start_y = st.sidebar.slider("Start Y", value= 332 if use_default_image  else 100, min_value=0, max_value=opencv_image.shape[0], key='sy')    finish_x = st.sidebar.slider("Finish X", value= 309 if use_default_image  else 100, min_value=0, max_value=opencv_image.shape[1], key='fx')    finish_y = st.sidebar.slider("Finish Y", value= 330 if use_default_image  else 100, min_value=0, max_value=opencv_image.shape[0], key='fy')    marked_image = opencv_image.copy()    circle_thickness=(marked_image.shape[0]+marked_image.shape[0])//2//100 #circle thickness based on img size    cv2.circle(marked_image, (start_x, start_y), circle_thickness, (0,255,0),-1)    cv2.circle(marked_image, (finish_x, finish_y), circle_thickness, (255,0,0),-1)    st.image(marked_image, channels="RGB", width=800)


image

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

После того, как пользователь определил начальную и конечную позиции, мы хотим кнопку, чтобы решить лабиринт и отобразить решение. Элемент st.spinner () отображается только во время работы его дочернего процесса, а вызов st.image () используется для отображения изображения.

if marked_image is not None:    if st.button('Solve Maze'):        with st.spinner('Solving your maze'):            path = maze.find_shortest_path(opencv_image,(start_x, start_y),(finish_x, finish_y))        pathed_image = opencv_image.copy()        path_thickness = (pathed_image.shape[0]+pathed_image.shape[0])//200        maze.drawPath(pathed_image, path, path_thickness)        st.image(pathed_image, channels="RGB", width=800)


image

Кнопка

image

Вывод решения

Вывод


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

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

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Читать еще


Подробнее..

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

03.07.2020 16:05:03 | Автор: admin
Многие убеждены, что область Human Computer Interaction (HCI или человеко-компьютерное взаимодействие) сводится только к проектированию сайтов или приложений, а основная задача специалиста удовлетворить пользователей, увеличивая на несколько пикселей кнопку лайка. В посте мы хотим показать, что это совсем не так, и рассказать, что происходит в HCI на стыке с исследованиями машинного обучения и искусственного интеллекта. Возможно, это позволит читателям посмотреть на эту область с новой для себя стороны.

Для обзора мы взяли труды конференции CHI: Conference on Human Factors in Computing Systems за 10 лет, и с помощью NLP и анализа сетей социтирования посмотрели на темы и области на пересечении дисциплин.




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

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

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

В первую очередь мы расскажем, что происходит в таких областях, как xAI и iML (eXplainable Artificial Intelligence и Interpretable Machine Learning) со стороны интерфейсов и пользователей, а также как в HCI изучают когнитивные аспекты работы специалистов data science, и приведем примеры интересных работ последних лет в каждой области.

xAI и iML


Методы машинного обучения интенсивно развиваются и что важнее с точки зрения обсуждаемой области активно внедряются в автоматизированное принятие решений. Поэтому исследователи все чаще обсуждают вопросы: как пользователи, не являющиеся специалистами в машинном обучении, взаимодействуют с системами, где подобные алгоритмы применяются? Один из важных вопросов такого взаимодействия: как сделать, чтобы пользователи доверяли решениям, принятым на основе моделей? Поэтому с каждым годом все более горячей становится тематика интерпретируемого машинного обучения (Interpretable Machine Learning iML) и объяснимого искусственного интеллекта (eXplainable Artificial Intelligence XAI).

При этом, если на таких конференциях, как NeurIPS, ICML, IJCAI, KDD, обсуждают сами алгоритмы и средства iML и XAI, на CHI в фокусе оказываются несколько тем, связанных с особенностями дизайна и опытом использования этих систем. Например, на CHI-2020 этой тематике были посвящены сразу несколько секций, включая AI/ML & seeing through the black box и Coping with AI: not agAIn!. Но и до появления отдельных секций таких работ было достаточно много. Мы выделили в них четыре направления.

Дизайн интерпретирующих систем для решения прикладных задач


Первое направление это дизайн систем на основе алгоритмов интерпретируемости в различных прикладных задачах: медицинских, социальных и т. д. Такие работы возникают в очень разных сферах. Например, работа на CHI-2020 CheXplain: Enabling Physicians to Explore and Understand Data-Driven, AI-Enabled Medical Imaging Analysis описывает систему, которая помогает врачам исследовать и объяснять результаты рентгенографии органов грудной клетки. Она предлагает дополнительные текстовые и визуальные пояснения, а также снимки с таким же и противоположным результатом (поддерживающие и противоречащие примеры). Если система предсказывает, что на рентгенографии видно заболевание, то покажет два примера. Первый, поддерживающий, пример это снимок легких другого пациента, у которого подтверждено это же заболевание. Второй, противоречащий, пример это снимок, на котором заболевания нет, то есть снимок легких здорового человека. Основная идея сократить очевидные ошибки и уменьшить число обращений к сторонним специалистам в простых случаях, чтобы ставить диагноз быстрее.


CheXpert: автоматизированное выделение областей + примеры (unlikely vs definitely)



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


Второе направление разработка систем, которые помогают интерактивно сравнивать или объединять несколько методов и алгоритмов. Например, в работе Silva: Interactively Assessing Machine Learning Fairness Using Causality на CHI-2020 была представлена система, которая строит на данных пользователя несколько моделей машинного обучения и предоставляет возможность их последующего анализа. Анализ включает построение причинно-следственного графа между переменными и вычисление ряда метрик, оценивающих не только точность, но и честность (fairness) модели (Statistical Parity Difference, Equal Opportunity Difference, Average Odds Difference, Disparate Impact, Theil Index), что помогает находить перекосы в предсказаниях.


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

Общие вопросы интерпретируемости моделей


Третье направление обсуждение подходов к задаче интерпретируемости моделей в целом. Чаще всего это обзоры, критика подходов и открытые вопросы: например, что понимать под интерпретируемостью. Здесь хотелось бы отметить обзор на CHI-2018 Trends and Trajectories for Explainable, Accountable and Intelligible Systems: An HCI Research Agenda, в котором авторы рассмотрели 289 основных работ, посвященных объяснениям в искусственном интеллекте, и 12 412 публикаций, цитирующих их. С помощью сетевого анализа и тематического моделирования они выделили четыре ключевых направления исследований 1) Intelligent and Ambient (I&A) Systems, 2) Explainable AI: Fair, Accountable, and Transparent (FAT) algorithms and Interpretable Machine Learning (iML), 3) Theories of Explanations: Causality & Cognitive Psychology, 4) Interactivity and Learnability. Кроме того, авторы описали основные тренды исследований: интерактивное обучение и взаимодействие с системой.

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


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

Инструментов и алгоритмов интерпретации появилось очень много, поэтому возникает вопрос: как понять, какой же алгоритм выбрать? В работе Questioning the AI: Informing Design Practices for Explainable AI User Experiences как раз обсуждаются вопросы мотивации использования объясняющих алгоритмов и выделяются проблемы, которые при всем многообразии методов еще не решены в достаточной степени. Авторы приходят к неожиданному выводу: большинство существующих методов построены так, что отвечают на вопрос почему (почему у меня такой результат), в то время как пользователям для принятия решений нужен еще и ответ на вопрос почему нет (почему не другой), а иногда что сделать, чтобы результат изменился.

В работе говорится также о том, что пользователям нужно понимать, каковы границы применимости методов, какие у них есть ограничения и это нужно явно внедрять в предлагаемые инструменты. Более ярко эта проблема показана в статье Interpreting Interpretability: Understanding Data Scientists' Use of Interpretability Tools for Machine Learning. Авторы провели небольшой эксперимент со специалистами в области машинного обучения: показали им результаты работы нескольких популярных инструментов для интерпретации моделей машинного обучения и предложили ответить на вопросы, связанные с принятием решения на основе этих результатов. Оказалось, что даже специалисты слишком доверяют подобным моделям и не относятся к результатам критически. Как любой инструмент, объясняющие модели можно использовать неправильно. При разработке инструментария важно учитывать это, привлекая накопленные знания (или специалистов) в области человеко-компьютерного взаимодействия, чтобы учитывать особенности и потребности потенциальных пользователей.

Data Science, Notebooks, Visualization


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

Поэтому предметом этой области HCI становится разработка новых способов визуализации неопределенности в предсказаниях моделей, создание систем для сравнения анализа, проведенного разными способами, а также анализ работы аналитиков с инструментами, например с Jupyter notebooks.

Визуализация неопределенности


Визуализация неопределенности одна из особенностей, которые отличают научную графику от презентационной и бизнес-визуализации. Довольно долго ключевым в последних считался принцип минималистичности и фокуса на основных трендах. Однако это приводит к чрезмерной уверенности пользователей в точечной оценке величины или прогноза, что может быть критичным, особенно, если мы должны сравнивать прогнозы с разной степенью неопределенности. Работа Uncertainty Displays Using Quantile Dotplots or CDFs Improve Transit Decision-Making анализирует, насколько способы визуализации неопределенности в предсказании для точечных графиков и кумулятивных функций распределения помогают пользователям принимать более рациональные решения на примере задачи оценки времени прибытия автобуса по данным мобильного приложения. Что особенно приятно, один из авторов поддерживает пакет ggdist для R с различными вариантами визуализации неопределенности.


Примеры визуализации неопределенности (https://mjskay.github.io/ggdist/)

Однако часто встречаются и задачи визуализации возможных альтернатив, например, для последовательностей действий пользователя в веб-аналитике или аналитике приложений. Работа Visualizing Uncertainty and Alternatives in Event Sequence Predictions анализирует, насколько графическое представление альтернатив на основе модели Time-Aware Recurrent Neural Network (TRNN) помогает экспертам принимать решения и доверять им.

Сравнение моделей


Не менее важный, чем визуализация неопределенности, аспект работы аналитиков сравнение того, как часто скрытый выбор исследователем разных подходов к моделированию на всех его этапах может вести к различным результатам анализа. В психологии и социальных науках набирает популярность предварительная регистрация дизайна исследования и четкое разделение эксплораторных и конфирматорных исследований. Однако в задачах, где исследование в большей степени основано на данных, альтернативой могут стать инструменты, позволяющие оценить скрытые риски анализа за счет сравнения моделей. Работа Increasing the Transparency of Research Papers with Explorable Multiverse Analyses предлагает использовать интерактивную визуализацию нескольких подходов к анализу в статьях. По сути, статья превращается в интерактивное приложение, где читатель может оценить, что изменится в результатах и выводах, если будет применен другой подход. Это кажется полезной идеей и для практической аналитики.

Работа с инструментами организации и анализа данных


Последний блок работ связан с исследованием того, как аналитики работают с системами, подобными Jupyter Notebooks, которые стали популярным инструментом организации анализа данных. Статья Exploration and Explanation in Computational Notebooks анализирует противоречия между исследовательскими и объясняющими целями, изучая найденные на Github интерактивные документы, а в Managing Messes in Computational Notebooks авторы анализируют, как эволюционируют заметки, части кода и визуализации в итеративном процессе работы аналитиков, и предлагают возможные дополнения в инструменты, чтобы поддерживать этот процесс. Наконец, уже на CHI 2020 основные проблемы аналитиков на всех этапах работы, от загрузки данных до передачи модели в продакшн, а также идеи по улучшению инструментов обобщены в статье Whats Wrong with Computational Notebooks? Pain Points, Needs, and Design Opportunities.


Преобразование структуры отчетов на основе логов выполнения (https://microsoft.github.io/gather/)

Подводя итог


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

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

Перевод 8 трюков в Python, используемых опытными программистами

30.06.2020 18:10:31 | Автор: admin
image

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

1. Сортировка объектов по нескольким ключам


Предположим, мы хотим отсортировать следующий список словарей:

people = [{ 'name': 'John', "age": 64 },{ 'name': 'Janet', "age": 34 },{ 'name': 'Ed', "age": 24 },{ 'name': 'Sara', "age": 64 },{ 'name': 'John', "age": 32 },{ 'name': 'Jane', "age": 34 },{ 'name': 'John', "age": 99 },]


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

SELECT * FROM people ORDER by name, age


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

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

import operatorpeople.sort(key=operator.itemgetter('age'))people.sort(key=operator.itemgetter('name'))


Обратите внимание, как я изменил порядок. Сначала сортируем по возрасту, а потом по имени. С помощью operator.itemgetter() мы получаем поля возраста и имени из каждого словаря в списке.

Это дает нам результат, который мы хотели:

[ {'name': 'Ed',   'age': 24}, {'name': 'Jane', 'age': 34}, {'name': 'Janet','age': 34}, {'name': 'John', 'age': 32}, {'name': 'John', 'age': 64}, {'name': 'John', 'age': 99}, {'name': 'Sara', 'age': 64}]


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

Источник вдохновения вопрос со StackOverflow.

2. Списковые включения (Генератор списка)


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

[ expression for item in list if conditional ]


Очень простой пример для заполнения списка последовательностью чисел:

mylist = [i for i in range(10)]print(mylist)# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


И поскольку вы можете использовать выражение, вы также можете сделать некоторую математику:

squares = [x**2 for x in range(10)]print(squares)# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]


Или даже вызвать внешнюю функцию:

def some_function(a):    return (a + 5) / 2    my_formula = [some_function(i) for i in range(10)]print(my_formula)# [2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0]


И, наконец, вы можете использовать если для фильтрации списка. В этом случае мы сохраняем только те значения, которые делятся на 2:

filtered = [i for i in range(20) if i%2==0]print(filtered)# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]


3. Проверьте использование памяти ваших объектов


С помощью sys.getsizeof() вы можете проверить использование памяти объектом:

import sysmylist = range(0, 10000)print(sys.getsizeof(mylist))# 48


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

import sysmyreallist = [x for x in range(0, 10000)]print(sys.getsizeof(myreallist))# 87632


Итак, поиграв с sys.getsizeof(), вы можете больше узнать о Python и использовании вашей памяти.

4. Классы данных


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

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


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

from dataclasses import dataclass@dataclassclass Card:    rank: str    suit: str    card = Card("Q", "hearts")print(card == card)# Trueprint(card.rank)# 'Q'print(card)Card(rank='Q', suit='hearts')


Подробное руководство можно найти здесь.

5. Пакет attrs


Вместо классов данных вы можете использовать attrs. Есть две причины, чтобы выбрать attrs:

  • Вы используете версию Python старше 3.7
  • Вы хотите больше возможностей


Пакет attrs поддерживает все основные версии Python, включая CPython 2.7 и PyPy. Некоторые из дополнительных атрибутов, предлагаемых attrs по сравнению с обычными классами данных, являются валидаторами и конвертерами. Давайте посмотрим на пример кода:

@attrsclass Person(object):    name = attrib(default='John')    surname = attrib(default='Doe')    age = attrib(init=False)    p = Person()print(p)p = Person('Bill', 'Gates')p.age = 60print(p)# Output: #   Person(name='John', surname='Doe', age=NOTHING)#   Person(name='Bill', surname='Gates', age=60)


Авторы attrs фактически работали в PEP, которые ввели классы данных. Классы данных намеренно хранятся проще (легче для понимания), в то время как attrs предлагает полный набор функций, которые вам могут понадобиться!

Дополнительные примеры можно найти на странице примеров attrs.

6. Объединение словарей (Python 3.5+)


Начиная с Python 3.5, легче объединять словари:

dict1 = { 'a': 1, 'b': 2 }dict2 = { 'b': 3, 'c': 4 }merged = { **dict1, **dict2 }print (merged)# {'a': 1, 'b': 3, 'c': 4}


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

В Python 3.9 объединение словарей становится еще чище. Вышеупомянутое слияние в Python 3.9 может быть переписано как:

merged = dict1 | dict2


7. Поиск наиболее часто встречающегося значение


Чтобы найти наиболее часто встречающееся значение в списке или строке:

test = [1, 2, 3, 4, 2, 2, 3, 1, 4, 4, 4]print(max(set(test), key = test.count))# 4


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

Вы даже попытались, не так ли? Я все равно скажу вам:

  • max() вернет самое большое значение в списке. Аргумент key принимает функцию единственного аргумента для настройки порядка сортировки, в данном случае это test.count. Функция применяется к каждому элементу итерируемого.
  • test.count встроенная функция списка. Она принимает аргумент и будет подсчитывать количество вхождений для этого аргумента. Таким образом, test.count(1) вернет 2, а test.count(4) вернет 4.
  • set(test) возвращает все уникальные значения из test, поэтому {1, 2, 3, 4}


Итак, в этой единственной строке кода мы принимаем все уникальные значения теста, который равен {1, 2, 3, 4}. Далее max применит к ним функцию list.count и вернет максимальное значение.
И нет я не изобрел этот однострочник.

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

from collections import CounterCounter(test).most_common(1)# [4: 4]


8. Возврат нескольких значений


Функции в Python могут возвращать более одной переменной без словаря, списка или класса. Это работает так:

def get_user(id):    # fetch user from database    # ....    return name, birthdatename, birthdate = get_user(4)


Это нормально для ограниченного числа возвращаемых значений. Но все, что превышает 3 значения, должно быть помещено в (data) класс.

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Читать еще


Подробнее..

Календарь онлайн-событий в сфере IT на июль 2020

01.07.2020 00:06:33 | Автор: admin
Если у вас в планах создать нечто гениальное до конца лета, июль точно стоит посвятить самообразованию. Собрала для вас свежую онлайн-афишу IT-мероприятий на ближайший месяц.

1 июля, 19:00 Вебинар Многопоточная очередь сообщений на С++

1 июля, 20:00 Вебинар Принципы мобильного тестирования

2 июля, 18:00 Онлайн-трансляция для тимлидов

2 июля, 17:00 Backend&Test Meetup

2 июля, 17:00 Innopolis Mobile MeetUp

3 июля, 13:00 Mobile Webinar Android

6 июля, 19:00 Онлайн-дискуссия о философии искусственного интеллекта

7 июля, 16:00 Безопасность WEB: Уязвимости авторизации

7 июля, 19:00 Онлайн-трансляция UX дизайн и архитектура

9 июля, 10:00 Бизнес-завтрак Управление мобильностью

15 июля, 18:00 Online IT HR meetup

16 июля, 12:00 Анализ данных с помощью Yandex Cloud Functions и Yandex Data Proc

16 июля, 20:00 Революционные нейронные сети 2020 года

21 июля, 16:00 Безопасность WEB: Ошибки бизнес-логики

22 июля, 18:00 Мини-Гипербатон Яндекса о качестве локализации программных продуктов

30 июля, 17:00 Geekhub Big Data Online Meetup
Подробнее..

Перевод - recovery mode Учебный проект на Python алгоритм Дейкстры, OpenCV и UI ( часть 1)

02.07.2020 20:17:59 | Автор: admin
Лабиринты это распространенная головоломка для людей, но они представляют из себя интересную задачу для программирования, которую мы можем решить, используя методы кратчайшего пути, такие как алгоритм Дейкстры.

Вспоминаем алгоритм Дейкстры


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

Сначала мы присваиваем значение расстояния от источника всем узлам. Узел s получает значение 0, потому что это источник; остальные получают значения для начала.

image

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

image

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

image

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

image

image

image

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

Концептуализация изображений лабиринта


image

Мы можем представить себе изображение как матрицу пикселей. Каждый пиксель (для простоты) имеет значение RGB 0,0,0 (черный) или 255,255,255 (белый). Наша цель создать кратчайший путь, который начинается на белом и не переходит на чёрные границы. Чтобы представить эту цель, мы можем рассматривать каждый пиксель как узел и рисовать ребра между соседними пикселями с длиной ребер, основанной на разнице значений RGB. Мы будем использовать формулу евклидова квадратного расстояния и добавим 0,1, чтобы гарантировать отсутствие длины пути 0 (требование для алгоритма Дейкстры):

image

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

image

Реализация


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

import cv2import matplotlib.pyplot as pltimport numpy as npimg = cv2.imread('maze.png') # read an image from a file usingcv2.circle(img,(5,220), 3, (255,0,0), -1) # add a circle at (5, 220)cv2.circle(img, (25,5), 3, (0,0,255), -1) # add a circle at (5,5)plt.figure(figsize=(7,7))plt.imshow(img) # show the imageplt.show()


image


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

class Vertex:    def __init__(self,x_coord,y_coord):        self.x=x_coord        self.y=y_coord        self.d=float('inf') #current distance from source node        self.parent_x=None        self.parent_y=None        self.processed=False        self.index_in_queue=None


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

def find_shortest_path(img,src,dst):    pq=[] #min-heap priority queue    imagerows,imagecols=img.shape[0],img.shape[1]    matrix = np.full((imagerows, imagecols), None)     #access matrix elements by matrix[row][col]    #fill matrix with vertices    for r in range(imagerows):        for c in range(imagecols):            matrix[r][c]=Vertex(c,r)            matrix[r][c].index_in_queue=len(pq)            pq.append(matrix[r][c])    #set source distance value to 0    matrix[source_y][source_x].d=0    #maintain min-heap invariant (minimum d Vertex at list index 0)    pq = bubble_up(pq, matrix[source_y][source_x].index_in_queue)


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

#Implement euclidean squared distance formuladef get_distance(img,u,v):    return 0.1 + (float(img[v][0])-float(img[u][0]))**2+(float(img[v][1])-float(img[u][1]))**2+(float(img[v][2])-float(img[u][2]))**2#Return neighbor directly above, below, right, and leftdef get_neighbors(mat,r,c):    shape=mat.shape    neighbors=[]    #ensure neighbors are within image boundaries    if r > 0 and not mat[r-1][c].processed:         neighbors.append(mat[r-1][c])    if r < shape[0] - 1 and not mat[r+1][c].processed:            neighbors.append(mat[r+1][c])    if c > 0 and not mat[r][c-1].processed:        neighbors.append(mat[r][c-1])    if c < shape[1] - 1 and not mat[r][c+1].processed:            neighbors.append(mat[r][c+1])    return neighbors


Теперь мы можем реализовать алгоритм Дейкстры и присвоить значения расстояния (d) всем вершинам пикселей в изображении лабиринта:

while len(pq) > 0:    u=pq[0] #smallest-value unprocessed node    #remove node of interest from the queue    pq[0]=pq[-1]     pq[0].index_in_queue=0    pq.pop()    pq=bubble_down(pq,0) #min-heap function, see source code         u.processed=True    neighbors = get_neighbors(matrix,u.y,u.x)    for v in neighbors:        dist=get_distance(img,(u.y,u.x),(v.y,v.x))        if u.d + dist < v.d:            v.d = u.d+dist            v.parent_x=u.x #keep track of the shortest path            v.parent_y=u.y            idx=v.index_in_queue            pq=bubble_down(pq,idx)             pq=bubble_up(pq,idx)


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

img = cv2.imread('maze.png') # read an image from a file using opencv (cv2) libraryp = find_shortest_path(img, (25,5), (5,220))drawPath(img,p)plt.figure(figsize=(7,7))plt.imshow(img) # show the image on the screen plt.show()


image

image

Давайте попробуем другие лабиринты со всего Интернета.

image

image

image

image

Полный исходный код доступен на GitHub здесь.

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Читать еще


Подробнее..

Как сменить свою специальность на программиста?

04.07.2020 18:11:54 | Автор: admin
Вам надоела ваша работа? Нет перспектив? Возможно, только начинаете свой путь?
В данной статье мы рассмотрим какой путь надо пройти, сколько времени, сил и денег надо затратить чтобы с нуля дойти до уровня, когда вам начнут присылать приглашения на работу за рубежом на очень вкусных условиях.



Здравствуйте, меня зовут Александр Зеленин. Я программист с более чем 15 годами опыта. За это время удалось поработать на позициях от веб-разработчика до CTO, в компаниях разного уровня (от 5 человек, до 2000+, стартапах, корпорациях), в разных странах и городах. Так же собеседовал более тысячи человек за всё время, вёл образовательные курсы, менторил и так далее.

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

Обязательно ли релевантное высшее образование?


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

Но, всё же, с высшим образованием проще?


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

Я интроверт. Программист это же самый круто вариант для интровертов, да?


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

Сложно учиться?


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

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

Оно того стоит вообще?


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

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

  • Для РФ: зарплата в районе 200 000 рублей белая, ДМС (на семью), печеньки, свободный график, оплата образования/садика детей, поездки на профильные конференции, высокую стабильность, интересные задачи, полный пакет для переезда (квартира на месяц, билеты, перевозка грузов, помощь с поиском жилья и т.п.)
  • Для Европы: зарплата в районе 5000 евро, и в принципе всё что и выше. В пакет для переезда часто ещё включают единоразовую выплату в районе 7000 евро. Часто ещё местная пенсия начинает капать и есть возможность позже получить вид на жительство / гражданство
  • США/Канада/Швейцария/Мидл Ист: зарплата в районе 10000$, и все плюшки выше

Что значит специалист высокого уровня?


Принято условно делить специалистов на 3 уровня. Часто очень разнятся требования, но в общем случае они следующие:

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

Окей, и сколько времени учиться на каждый из уровней?


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

После чего джуниором проработаете около 1.5 лет.

После чего мидлом ешё года два.

Если не меняли предметную область, то добро пожаловать в сеньёры (4-5 лет суммарно).

Погоди, погоди Я вот видел курсы, там 3 раза в неделю по 2 часа и через два месяца мне обещают зарплату в 100 000 в месяц!


Ну если обещают, значит так и будет (нет).

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

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

Окей, окей, а вообще польза от курсов платных есть?


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

Какие курсы порекомендуешь?


Бесплатные. Я серьёзно. Главная ценность курсов общение с ментором. На этом их польза заканчивается. Проблема многих подобных платформ в том, что: на них много участников и внимание ментора рассеивается, менторы не квалифицированы.

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

Эээ, так как тогда учиться?


  1. 1. Обязательно нужно найти личного ментора.
    Без этого весь процесс будет либо замедлен в разы, либо уйдёте, не туда потеряв кучу времени. Как найти ментора? Лучший способ это среди друзей и знакомых, кто либо уже программист, либо учится (хотя бы полгода). Обычно программисты не против делиться знаниями и помогать.
    Другой способ это нанять ментора. Минус этого способа в том, что он стоит денег. Плюс в том, что можно более точно подобрать под свои нужды. Тут надо учитывать зарплату хороших спецов (см в предыдущих вопросах) и понимать, что даже несколько часов в неделю обойдутся прилично.
  2. 2. Определиться, где вы хотите работать и что делать
    Это нужно сразу, чтобы подобрать релевантные технологии для изучения и быть полезным этой компании через полгода
  3. 3. Составить план и поставить сроки
    Составить план поможет ментор. Самому это нереально, потому что ты не знаешь то, что ты не знаешь

Ментор, ментор что, совсем никак без него?


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

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

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

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


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

Другой способ это ну фигачить по полной. А вы чего хотели? :-D

У меня друг закончил курсы за два месяца и начал получать 5000$ в месяц сразу после


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

Где искать работу?


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

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

Можно ли устроиться сразу на удалёнку?


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

Мне 45. Возьмут ли меня Juniurом без живого опыта?


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

Какой язык учить?


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

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

Я думал ты пошутишь про английский. Надо его учить?


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

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

Погоди, ты сказал язык не важен что?


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

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

Окей, можешь накидать мне план что делать то?


  1. Определитесь реально оно вам нужно. Стоит ли оно того?
  2. Решите чем хотите заниматься. В идеале составить список компаний, в которых хотели бы работать. В идеале выбрать, где хотите быть через полгода, через два и через пять.
  3. Напишите в компании, где хотите через полгода работать. Узнайте условия найма, что нужно выучить и так далее.
  4. Составьте план тем, которые надо изучить (из описания вакансий и информации из пунктов 2 и 3)
  5. Учите, практикуйте. Каждый день. Каждый. Обязательно. Без пауз.
  6. Решайте задачки на платформах типа Leetcode и Hackerrank. Минимум 1 в день, хотя бы easy уровень.
  7. По мере продвижения можно контактировать с рекрутерами из компаний и искать возможность чтобы вас наняли. Чем раньше, тем лучше. Для увеличения шансов можно попробовать сделать какое-нибудь мини-решение полезное для компании, чтобы заинтересовать их.
  8. Найдите ментора.

Вне зависимости от языка список тем, которые я рекомендую включить в план: контроль версий (git, github), структуры и алгоритмы (знать все распространённые, big O, знать что что-то такое есть и уметь найти быстро), IDE (зачем, как настроить), отладка и профилирование (как искать ошибки, точки остановки и прочее), тестирование (написание хотя бы простейших тестов и понимание что включать в них), базы данных (реляционные, сетевые, документо-ориентированные), документирование (как писать, зачем), планирование и приоритизация (сколько займёт, что делать и когда), изучить Style Gudie по вашему языку, linux (базовое понимание что там, зачем и куда, умение запустить свой код там), пакетные менеджеры (как пользоваться, зачем, как поддерживать), семантичное версирование (зачем оно, как следовать), фреймворки (на нужном языке, хотя бы для ознакомления несколько), инструменты для сборки и автоматизации, криптография (базово что существует, а не как сделать), авторизация и аутентификация (что есть что и что для этого существует).

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

Я видел, что компания, которая мне интересна обучает с нуля и нанимает. В чём подвох?


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

Жесть, всё сложно.


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

Эх, айти, куда ж ты котишься?

04.07.2020 14:10:42 | Автор: admin
Ну что, Хабр, прошло полгода какого-то очень неприятного 2020, до конца десятилетия ещё чуть-чуть и уже сегодня я могу сказать: это десятилетие прежде всего стало золотым веком IT-сферы. Накопленный опыт, новые эксперименты и крутое железо сделали своё дело. Казалось, что айти стало новым рок-н-роллом, но как-то быстро оно приблизилось к тому, чтобы стать новой попсой. Все хотят в айти, неважно кем: менеджерами всего и по всему, переводчиками, деврелами, пиарщиками, копирайтерами, ну и собственно программистами, тестировщиками, инженерами. А отрасль тем временем сильно видоизменяется. Предлагаю вам поговорить о нас, о нашем айти и о том, куда всё катится.


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

Глава 1. Программисты


Культ программирования


Программисты это космонавты нашего времени, ими хотят стать буквально все: профессия кажется модной, перспективной и высокооплачиваемой. Самое интересное, что культ распространяется не только на школьников, студентов и их родителей, но и на компании. Года так с 2015-го формируется интересное поветрие: все компании стремятся назвать себя ИТ-компанией. Банки, ритейл, интернет-магазины и даже пиццерии позиционируют себя именно как технологические. Здесь происходит подмена понятий: если компания вооружилась крутыми технологиями и предоставляет технологичные услуги своим клиентам, это не ИТ-компания, а продвинутые в плане технической трансформации банки, ритейлеры, рестораны и т.д. ИТ-компания это всё же те организации, которые разрабатывают, внедряют, развивают и поддерживают технологии: хостинги, ЦОДы, разработчики ПО, производители железа, системные интеграторы и т.д.

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

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

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

Образованцы и образованные


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

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


  • Заменители технического образования (прикладная информатика, бизнес-информатика и т.д.) слабые факультеты в нетехнических вузах, которые открываются для целей набора большого количества студентов, не прошедших в профильные. Образование в большинстве случаев откровенно слабое, преподаватели предлагают устаревшие программы. Исключений мало, правда, они есть.
  • Корпоративные университеты и курсы направление, которое в последнее время ощутимо выросло в качестве и подходах (появились бесплатные слоты, узкие и комплексные программы по разработке и менеджменту, встречаются даже программы для детей). Преподают сами сотрудники, поэтому максимум практики, минимум болтовни. Ощутимых недостатков два: 1) компания обучает под свои требования и шаблоны; 2) такое образование не может заменить высшее и подходит для начинающих готовых специалистов. По сути это исключительно дополнительное образование.
  • Комплексные коммерческие университеты слабые учреждения для понтов и сбора денег. Без комментариев. Но народ идёт, потому что доступно и иллюзорно просто (читай ни о чём).
  • Онлайн-курсы, школы, университеты колоссальная часть индустрии, которая выглядит как джентльмен во фраке, который три месяца не мылся. Вроде и прилично, но при ближайшем знакомстве чёрт побери! Да, хорошие и даже именитые преподаватели, внятные и поэтапные программы, но это низкий уровень подготовки, не соизмеримый с потраченными деньгами. Это же время лучше потратить на просмотр курсов MIT и активное самообучение.

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

Зарплатный коллайдер


Заплаты на ИТ-рынке перегретые во многом из-за того, что компании не-айтишной сферы имеют ресурсы, чтобы устраивать гонку за разработчиками. Условный банк готов заплатить за готового бэкенд-программиста гораздо больше, чем условный поисковик или разработчик ПО, который предпочтёт вырастить себе разработчика из junior-а. Ещё больше платят проектные компании и аутсорсинговые компании (особенно зарубежные). Программисты ощущают себя новыми рок-звёздами, и вот уже сопляк выпускник после окончания мехмата с опытом тестирования 0,5 года закидывает ногу на ногу и требует соточку чистыми.

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

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

Чёрные дыры IT-мира


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

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

Интроверт, характер мерзический


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

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

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


А вы знаете ответы на эти вопросы? Народ хочет знать :-)

Глава 2. Деловое окружение


Охотники за головами


Конечно, на поле боя за айтишников важная роль отводится HR-специалистам, которые уже давно переросли стандартную должность кадровика и превратились в HR, специалистов по развитию персонала, DevRel (специалистов по связям с разработчиками и внутреннему HR PR) и проч. В некоторых компаниях даже есть отдельные HR для найма в R&D и отдельные для всего остального. Они не брезгуют никакими средствами, лишь бы добиться своего и заполучить специалиста, но нередко губят своё же дело на собеседованиях (просьбами написать код на листочке, speak in english with me, вопросами из первых позиций выдачи гугла и психологическими задачками).

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

Они почему-то не понимают, что основной стресс нового сотрудника происходит нет от неудобных тапочек или грустных рыбок в аквариуме, а от сложности вхождения в рабочий процесс, в правила разработки, code style, особенности проектов и т.д. В employee orientation (информирование новичка) должно входить прежде всего ознакомление с обязанностями, функциональными особенностями должности, с сотрудниками команды (в первую очередь связанными с рабочими задачами). И на первом этапе самый ценный человек не формальный, а включённый коллега-наставник по профильной деятельности, который всё объяснит, всему обучит, разъяснит и безболезненно включит в разработку. А тапочки и из ИКЕИ сойдут.

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

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

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

Охотники за кошельками


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

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

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

Да и ковид внёс свои коррективы. Вопрос, надолго ли?

  • Школы английского языка. Хотите с носителем, хотите с преподавателем, хотите в мобильном приложении без общения. Очень много школ языка, которые ориентируются именно на айтишников, справедливо полагая, что в их профессиональной деятельности без английского никуда даже по Хабру это очень заметно. Между тем, мало кто говорит, что проку от таких школ именно в профессиональной сфере мало, здесь больше подойдёт погружение в среду, приоритетное использование иностранного на работе и в переписке, чтение книг и статей на английском. Школы больше помогут раскрепоститься и начать разговаривать, но профессиональная сфера зависит от вас и не так проста, как кажется.
  • Курсы программирования. Их просто сотни в любом городе, онлайн, при крупных компаниях и в вузах. Из них сильных и реально полезных единицы и, как правило, они оффлайновые и связаны с реальной практикой. Онлайн-курс может сориентировать вас, стоит идти в эту технологию или нет, понять, заходит или нет, но конечный результат будет зависеть от вашей практики, книг перед вашим носом и количества разобранных мануалов. Никакие потраченные деньги не помогут, если вы будете просто слушателем максимум вы научитесь отличать код на своём языке от всех остальных и выучите крутые разработческие словечки. Стоимость годового курса популярных онлайн-академий можно инвестировать в себя гораздо выигрышней.
  • Курсы повышения квалификации (в ИТ, менеджменте и т.д.) ещё один слой онлайн и офлайн образования. Scrum, Agile, управление проектами, курс продуктового менеджера всё для вас. Не буду рассуждать о том, что это даёт, скажу так: в книгах написано лучше. А для карьеры гораздо полезнее будет MBA (но и эта тема имеет кучу нюансов).
  • Эксклюзивные услуги трудоустройства. Сервисы поиска работы это вообще для лохов, как бы намекают нам эксклюзивные рекрутеры и обещают трудоустроить в Google, Apple и Microsoft с пол пинка. Но за это придётся заплатить либо вам либо работодателю (который потом при первом же случае вас этим попрекнёт), пройти платный курс, оплатить особое оформление и наполнение резюме. К слову, гарантии почти никто не даёт. Думаю, вы поняли, как устроен этот бизнес. Ваш опыт в любом резюме прекрасен, не стоит переплачивать там, где в этом нет необходимости.
  • Издательства профессиональной литературы. Есть офигенные зарубежные и отечественные издательства, которые выпускают классные книги (выделю Питер как лучшее из российских), а есть издательства, которые делают не очень хорошие переводы, публикуют не лучшие отечественные труды и при этом активно продвигают себя как лучших помощников на пути становления тимлидом, менеджером проекта, ведущим разработчиком. Здесь помогает только внутренний фильтр: пролистать книгу, почитать отзывы, оценить важность контента.

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

Охотники за идеями


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

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

Акулы всего


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

А что здесь плохого, спросите вы? Ребята выполняют важные рабочие задачи. Всё верно, так и есть. Но среди них велико количество тех, кто даже не пытается разобраться в информационных технологиях и, например, заворачивает крутые статьи из-за нескольких косноязычных предложений, делает жуткие технические переводы, продаёт без понимания технических нюансов и требований клиентов на удачу, превращает грамотный Agile и Scrum в детскую, но строго обязательную игру с доской и бумажками, отнимает время на различные свои инициативы типа совместных офисных встреч, квизов и прочей фигни, которая устраивается после работы, но так же обязательна, как Scrum-доска. Эти ребята составляют сложные анкеты и инициируют психологическую и мотивационную аттестацию технарей, рассуждают о выгорании и токсичности, но при этом не особо готовы предлагать решения. Откуда в них заряд этой бурной деятельности? Всё просто: каждый из них проявляет активность, чтобы продемонстрировать свою деятельность, нужность и ценность для компании. Увы, нередко за счёт профессионалов, которые админят, пишут код, проектируют, тестируют и совершенно не хотят заполнять 127 вопросов анкеты о мягкости стульев, столовой и отношениях с коллегами. Потому что галочка на проекте аттестации будет, а стулья останутся неудобными, коллеги конфликтными, столовая так себе.

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

Глава 3. Войти в айти


Мнимая простота


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


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

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

Увы, миф о простоте вхождения в ИТ будет расти и дальше, во многом благодаря многочисленным школам программирования, готовым за ваши же деньги и ваше время убедить вас в том, что вы уже труЪ кодер и заоблачная зарплата почти что зачислена на карту. Самое удивительное, что упомянутых HR-ов нередко восхищает наличие таких сертификатов, это работает по принципу ого, насколько мотивирован человек и как он заставил себя засесть за учёбу в свои 33. Я был свидетелем совершенно потрясающей истории, как парня с семилетним опытом работы в ИТ-проекте не взяли менеджером проектов в большую региональную ИТ-компанию, а отдали предпочтение девушке без единого дня опыта в ИТ, которая на собеседовании рассказала, что проходит курс JavaScript в одной из онлайн-школ. Курс она бросила, а работа с оплатой выше рынка осталась.

Кто хочет быть миллионером?


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


Да, программисты получают заработную плату выше, чем средняя по рынку, но и трудозатрат и способностей такая профессия требует несравнимо больше. Фактически это непрерывный, напряжённый интеллектуальный труд. Иначе хорошо не получится, получится ниже среднего во всех смыслах. Условно говоря, если вам сейчас 35, вы получаете 60-80 тыс. руб., работая менеджером по чему-нибудь, линейным руководителем или инженером, и вы решите перейти в айти (разработку), то к своему уровню заработной платы вы придёте через 2 года минимум. А эти два года вы будете учиться и стажироваться, как обычный junior.

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

Стартап, это фальстарт


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

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

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

Глава 4. Что будет дальше?


Куда вырастет отрасль


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

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

Отрасли нужны все


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


Какая **** сделала этот запрос?!

Образование должно меняться


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

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

Технологии будут слабо меняться


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

Технологии будут взрывно меняться


Всё, что касается мобильной разработки, нейросетей, искусственного интеллекта, VR/AR и IoT будет меняться с огромной скоростью. Многие современные реализации несовершенны и понятно, что разработка ищет новые пути, чтобы решить сложные задачи каждой из этих технологий. Развитие мобильной разработки будет определяться изменением форм-факторов гаджетов: гибкие экраны потребуют инноваций. Таким образом, в скором времени нас ждёт перелом в привычном стеке. Быть одним из первых в освоении новых методик по-настоящему перспективно, интересно и несомненно доходно.

IT станет попсой


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

Цикл возобновится


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

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

Подискутируем?
Подробнее..

Перевод Чеклист для проекта по машинному обучению

07.07.2020 12:09:02 | Автор: admin
image

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

Зачем мне вообще нужен чеклист?

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

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

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

Как говорит Атул Гаванде в своей книге The Checklist Manifesto,
объем и сложность того, что мы знаем, превзошли нашу индивидуальную способность правильно, безопасно и надежно предоставлять свои преимущества.
Итак, позвольте мне провести вас по этому четкому и краткому списку действий, которые уменьшат вашу рабочую нагрузку и улучшат ваши результаты

Чеклист проектов по машинному обучению


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

1. Определите проблему с точки зрения высокого уровня


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

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

2. Определите источники данных и получите данные


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

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

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

3. Первоначальная разведка данных


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

Шаги:

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

4. Исследовательский анализ данных для подготовки данных


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

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

5. Разработайте базовую модель, а затем изучите другие модели, чтобы отобрать лучшие


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

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

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


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

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

7. Документируйте код и сообщайте свое решение


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

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

8. Разверните свою модель в продакшен, мониторинг


Если ваш проект требует тестирования развертывания на реальных данных, вы должны создать веб-приложение или REST API для использования на всех платформах (web, Android, iOS). Основные пункты (будут варьироваться в зависимости от проекта) включают в себя:

  • Сохраните вашу окончательную обученную модель в файл h5 или pickle.
  • Обслуживайте свою модель с помощью веб-сервисов, Вы можете использовать Flask для разработки этих веб-сервисов.
  • Подключите источники входных данных и настройте конвейеры ETL.
  • Управляйте зависимостями с помощью pipenv, docker/Kubernetes (на основе требований масштабирования)
  • Вы можете использовать AWS, Azure или Google Cloud Platform для развертывания своего сервиса.
  • Делайте мониторинг производительности на реальных данных или просто для людей, чтобы они могли использовать вашу модель со своими данными.

Примечание. Чеклист может быть адаптирован в зависимости от сложности вашего проекта.

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Читать еще


Подробнее..

Перевод Генеративная зоология с нейронными сетями

05.07.2020 14:08:58 | Автор: admin
image

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

image

Примеры изображений, созданных GAN

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

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

Your browser does not support HTML5 video.

Я адаптировал код из статьи о прогрессивных GAN и обучил модель с помощью 12000 итераций, используя мощности Google Cloud (8 графических процессоров NVIDA K80) и весь набор данных PhyloPic. Общее время обучения, включая некоторые ошибки и эксперименты, составило 4 дня. Я использовал окончательную обученную модель для создания 50-килобайтных отдельных изображений, а затем потратил часы на просмотр результатов, категоризацию, фильтрацию и сопоставление изображений. Я также немного редактировал некоторые изображения, повернув их, чтобы все существа были направлены в одну и ту же сторону (чтобы добиться визуального удовлетворения). Этот практический подход означает, что то, что вы видите ниже это своего рода коллаборация между мной и нейронной сетью это была творческая работа, и я вносил в нее свои правки.

image

Летающие насекомые

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

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

image

Птицы

image

Четвероногие

image

Динозавры

image

Рыбы

image

Жуки

image

Гоминиды

Странные вещи



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

image

Чудища

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

image

Абстрактные существа

image

Неидентифицируемые

Случайный отбор


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

image

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Читать еще


Подробнее..

Как IT гиганты помогают образованию? Часть 1 Google

29.06.2020 16:21:22 | Автор: admin
На старости лет, в свои 33 года, решил я пойти в магистратуру по компьютерным наукам. Первую свою вышку я закончил ещё в 2008 и совсем не в сфере ИТ, много воды с тех пор утекло. Как и любому другому студенту, ещё и со славянскими корнями, мне стало любопытно: что я могу получить на халяву (в основном в плане дополнительных знаний по специальности)? И, коль скоро моё прошлое и настоящее плотно пересекается с хостинг-индустрией, основной выбор пал на гигантов, предоставляющих облачные услуги.

В своём небольшом цикле я расскажу о том, какие образовательные возможности предлагают три лидера рынка облачных услуг студентам, преподавателям и учебным заведениям (как университетам, так и школам), а также как использует некоторые из них наш ВУЗ. И начну я с Google.



Сразу за хабракатом немного разочарую. Жителям стран СНГ не очень повезло. Часть вкусных плюшек Google For Education там не доступна. Потому о них я расскажу в конце, специально для тех, кто учится в вузах Европы, Северной Америки и некоторых других стран. Часть из них доступна в урезанном виде, впрочем. Итак, поехали.

G Suite for Education


Многие из нас любят Gmail, Google Drive и ежи с ними. Особо везучие даже успели захватить бесплатные аккаунты почты для своих доменов, ныне известную как G Suite legacy free edition, которой постепенно закручивают гайки. Если кто не знает, G Suite for Education это всё то же, и даже больше.

Любая школа и любой ВУЗ может получить 10000 лицензий (и, соответственно, аккаунтов) на почту, диск, календарь и прочие возможности сотрудничества, предлагаемые G Suite. Единственное ограничение учебное заведение должно иметь государственную аккредитацию и статус некоммерческой.

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

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

Google Colab


Отличный инструмент для любителей Jupyter Notebook. Доступен любому пользователю Google. Очень удобен как для индивидуальной, так и для совместной работы при изучении чего-либо из сферы машинного обучения и data science. Позволяет тренировать модели как на CPU, так и на GPU. Впрочем, для базового изучения Python тоже вполне подойдёт. Мы активно использовали этот инструмент на Методах интерпретации и классификации. Начать коллаборацию можно тут.


Контуры (для искушённых один из слоёв нейронки VGG16) египетского котика делают коллаборацию лучше

Google Classroom


Отличная LMS (learning management system), предоставляемая бесплатно как один из основных продуктов в рамках пакетов G Suite for Education, G Suite for Nonprofit, а также владельцам персональных аккаунтов. Также предоставляется как дополнительная услуга для обычных аккаунтов G Suite. Система перекрёстных разрешений доступа между разными типами аккаунтов несколько запутанная и нетривиальная. Чтобы не залазить в дебри, самый простой вариант всем участникам процессам учителям и ученикам пользоваться аккаунтами одного типа (либо образовательные, либо персональные).

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

Обучающие материалы


Google подготовил несколько различных возможностей научиться работать с их облачными услугами:
  • Подборка курсов на Coursera доступна для прослушивания бесплатно. Студентам из стран, которым особо повезло, предоставляется также возможность бесплатно выполнять практические задания (обычно платная услуга) и получить сертификаты по 13 курсам от Google. Впрочем, Coursera предоставляет по запросу финансовую помощь на свои курсы (т.е. просто предоставляет их бесплатно, если сможете их убедить, что Вам это очень надо, но денег нет но Вы держитесь). Некоторые курсы доступны полностью бесплатно до 31.07.2020.
  • Ещё одна подборка на Udacity
  • Вебинары Cloud OnAir рассказывают о возможностях и об интересных кейсах, созданных на базе Google Cloud.
  • Google Dev Pathways подборки статей и упражнений, раскрывающий различные темы, касающиеся работы с Google Cloud. Доступны для бесплатно для всех пользователей Google.
  • Codelabs подборка руководств по совершенно различным аспектам работы с продуктами Google. Пути (Pathways) из прошлого пункта являются упорядоченными подборками лабораторок отсюда.

Google for Education


Определённая подборка возможностей по изучению работы с услугами Google доступна лишь для ограниченного круга стран. Грубо говоря, страны ЕС/ЕЭЗ, США, Канада, Австралия, Новая Зеландия. Я учусь в Латвии, так что погреть руки об эти возможности получилось. Если Вы также учитесь в одной из упомянутых стран, наслаждайтесь.
  • Возможности для студентов:
    • 200 кредитов на прохождение интерактивных лабороторок на Qwiklabs.
    • Бесплатный доступ к платным версиям 13 курсов от Coursera (уже упоминал выше).
    • $50 кредитов Google Cloud (на момент написания статьи временно не предоставляется; однако всё равно можно получить тестовые $300, предлагаемые по дефолту при активации пробной подписки).
    • Скидка 50% на сертификацию G Suite.
    • Скидка 50% на экзамен Associate Cloud engineer (зарегистрироваться в программе должен представитель факультета).
  • Возможности для факультетов:
    • 5000 кредитов Qwiklabs, которыми можно поделиться со студентами.
    • $300 кредитов Google Cloud на проведение курсов и различных мероприятий.
    • $5000 кредитов Google Cloud на проведение исследовательских программ (на каждую программу).
    • Программа готовности к карьере бесплатные обучающие материалы и скидка на сертификацию Associate Cloud engineer для студентов и преподавателей.
  • Возможности для исследователей:
    • Соискатели докторской степени (PhD) могут получить $1000 кредитов Google Cloud для своих исследований.

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

Вместо заключения


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

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

И всё, другой рекламы не будет.
Подробнее..

Как IT гиганты помогают образованию? Часть 2 Microsoft

02.07.2020 12:23:15 | Автор: admin
В прошлом посте я рассказывал, о том, какие возможности предоставляет Google для студентов и образовательных учреждений. Для тех, кто его пропустил, вкратце напомню: я в свои 33 пошёл в магистратуру в Латвии и открыл для себя дивный мир бесплатных возможностей для студентов получить знания от лидеров рынка, а также для преподавателей сделать свои занятия более близкими к рынку. В этом посте речь пойдёт о том, что предлагает студентам и преподавателям Microsoft.


Office 365 для образования


Сколько бы ни существовало различных бесплатных альтернатив, всё же 3 наиболее популярные программы из пакета Office Word, Excel, PowerPoint остаются наиболее удобными, как по мне. LibreOffice всё же немного коряв визуально, а у Google Docs возможности по форматированию чуть поменьше.

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

Azure для учащихся


Естественно, не обошлось без бонусов для доступа к Azure облачным услугам, предоставляемым Microsoft. Жители более 140 стран могут получить бесплатный доступ к 25 облачным услугам и средствам разработки, а также $100 на баланс, которые можно использовать на другие сервисы. Через 12 месяцев, если Вы всё ещё студент, сумму и срок действия можно обнулить.

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

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

Обучающие материалы


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



Инструменты и средства для разработки


Список тут довольно обширный. Из того, что заинтересовало меня: Visual Studio 2019 Enterprise (использовал на одном из предметов, т.к. нужные возможности CLion не завелись), Microsoft Visio, Microsoft Project (пригодились на другом предмете), Windows 10 Education (просто пригодилась), серверные версии Windows



WintellectNOW


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



Pluralsight


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



Microsoft Learn


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

Центр преподавателей


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

Вместо заключения


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

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

И опять другой рекламы не будет.
Подробнее..

Перевод Повелевать Webом с помощью Python

03.07.2020 20:16:17 | Автор: admin
Путешествие в простую веб-автоматизацию

image


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

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

image


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

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

Подход


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

image

File structure (слева) и Complete Assignment (справа).

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

# os for file managementimport os# Build tuple of (class, file) to turn insubmission_dir = 'completed_assignments'dir_list = list(os.listdir(submission_dir))for directory in dir_list:    file_list = list(os.listdir(os.path.join(submission_dir, directory)))    if len(file_list) != 0:        file_tup = (directory, file_list[0])    print(file_tup)


('EECS491', 'Assignment 3 Inference in Larger Graphical Models.txt')

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

Веб-контроль с Selenium


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

import selenium# Using Chrome to access webdriver = webdriver.Chrome()# Open the websitedriver.get('https://canvas.case.edu')


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

image

Представьте, что веб-драйвер это человек, который никогда раньше не видел веб-страницу: нам нужно точно сказать, куда нажимать, что печатать и какие кнопки нажимать. Есть несколько способов сообщить нашему веб-драйверу, какие элементы найти, и все они используют селекторы. Селектор это уникальный идентификатор элемента на веб-странице. Чтобы найти селектор для определенного элемента, скажем, поле CWRU ID, нам нужно посмотреть код веб-страницы. В Chrome это можно сделать, нажав Ctrl + Shift + I или щелкнув правой кнопкой мыши на любом элементе и выбрав Посмотреть код. Это открывает инструменты разработчика Chrome, чрезвычайно полезное приложение, которое показывает HTML, лежащий в основе любой веб-страницы.

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

image

Этот HTML может выглядеть подавляющим, но мы можем игнорировать большую часть информации и сосредоточиться на частях id = "username" и name = "username". (они известны как атрибуты тега HTML).
Чтобы выбрать поле id с помощью нашего веб-драйвера, мы можем использовать атрибут id или name, который мы нашли в инструментах разработчика. Веб-драйверы в Selenium имеют много разных способов выбора элементов на веб-странице, и часто есть несколько способов выбрать один и тот же элемент:

# Select the id boxid_box = driver.find_element_by_name('username')# Equivalent Outcome! id_box = driver.find_element_by_id('username')


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

# Send id informationid_box.send_keys('my_username')


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

# Find password boxpass_box = driver.find_element_by_name('password')# Send passwordpass_box.send_keys('my_password')# Find login buttonlogin_button = driver.find_element_by_name('submit')# Click loginlogin_button.click()

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

image

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

# Find and click on list of coursescourses_button = driver.find_element_by_id('global_nav_courses_link')courses_button.click()# Get the name of the folderfolder = file_tup[0]    # Class to select depends on folderif folder == 'EECS491':    class_select = driver.find_element_by_link_text('Artificial Intelligence: Probabilistic Graphical Models (100/10039)')elif folder == 'EECS531':    class_select = driver.find_element_by_link_text('Computer Vision (100/10040)')# Click on the specific classclass_select.click()


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

image

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

image

В этот момент я мог видеть финишную черту, но изначально этот экран меня озадачил. Я мог бы довольно легко нажать на поле Выбрать файл, но как я должен был выбрать нужный файл для загрузки? Ответ оказывается невероятно простым! Мы находим поле Choose File с помощью селектора и используем метод send_keys для передачи точного пути к файлу (называемого file_location в приведенном ниже коде) к блоку:

# Choose File buttonchoose_file = driver.find_element_by_name('attachments[0][uploaded_data]')# Complete path of the filefile_location = os.path.join(submission_dir, folder, file_name)# Send the file location to the buttonchoose_file.send_keys(file_location)


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

image

Теперь мы выбираем кнопку Отправить задание, нажимаем, и наше задание отправлено!

# Locate submit button and clicksubmit_assignment = driver.find_element_by_id('submit_file_button')submit_assignent.click()


image


Уборка


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

# Location of files after submissionsubmitted_file_location = os.path.join(submitted_dir, submitted_file_name)# Rename essentially copies and pastes filesos.rename(file_location, submitted_file_location)


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

Вот как это выглядит, когда я запускаю программу:

image

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

image

Пока программа работает, я могу наблюдать, как Python работает на меня:

image

Выводы


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

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

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

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Читать еще


Подробнее..

Перевод Python для начинающих как повелевать Webом

03.07.2020 22:11:07 | Автор: admin
Путешествие в простую веб-автоматизацию

image


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

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

image


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

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

Подход


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

image

File structure (слева) и Complete Assignment (справа).

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

# os for file managementimport os# Build tuple of (class, file) to turn insubmission_dir = 'completed_assignments'dir_list = list(os.listdir(submission_dir))for directory in dir_list:    file_list = list(os.listdir(os.path.join(submission_dir, directory)))    if len(file_list) != 0:        file_tup = (directory, file_list[0])    print(file_tup)


('EECS491', 'Assignment 3 Inference in Larger Graphical Models.txt')

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

Веб-контроль с Selenium


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

import selenium# Using Chrome to access webdriver = webdriver.Chrome()# Open the websitedriver.get('https://canvas.case.edu')


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

image

Представьте, что веб-драйвер это человек, который никогда раньше не видел веб-страницу: нам нужно точно сказать, куда нажимать, что печатать и какие кнопки нажимать. Есть несколько способов сообщить нашему веб-драйверу, какие элементы найти, и все они используют селекторы. Селектор это уникальный идентификатор элемента на веб-странице. Чтобы найти селектор для определенного элемента, скажем, поле CWRU ID, нам нужно посмотреть код веб-страницы. В Chrome это можно сделать, нажав Ctrl + Shift + I или щелкнув правой кнопкой мыши на любом элементе и выбрав Посмотреть код. Это открывает инструменты разработчика Chrome, чрезвычайно полезное приложение, которое показывает HTML, лежащий в основе любой веб-страницы.

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

image

Этот HTML может выглядеть подавляющим, но мы можем игнорировать большую часть информации и сосредоточиться на частях id = "username" и name = "username". (они известны как атрибуты тега HTML).
Чтобы выбрать поле id с помощью нашего веб-драйвера, мы можем использовать атрибут id или name, который мы нашли в инструментах разработчика. Веб-драйверы в Selenium имеют много разных способов выбора элементов на веб-странице, и часто есть несколько способов выбрать один и тот же элемент:

# Select the id boxid_box = driver.find_element_by_name('username')# Equivalent Outcome! id_box = driver.find_element_by_id('username')


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

# Send id informationid_box.send_keys('my_username')


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

# Find password boxpass_box = driver.find_element_by_name('password')# Send passwordpass_box.send_keys('my_password')# Find login buttonlogin_button = driver.find_element_by_name('submit')# Click loginlogin_button.click()

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

image

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

# Find and click on list of coursescourses_button = driver.find_element_by_id('global_nav_courses_link')courses_button.click()# Get the name of the folderfolder = file_tup[0]    # Class to select depends on folderif folder == 'EECS491':    class_select = driver.find_element_by_link_text('Artificial Intelligence: Probabilistic Graphical Models (100/10039)')elif folder == 'EECS531':    class_select = driver.find_element_by_link_text('Computer Vision (100/10040)')# Click on the specific classclass_select.click()


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

image

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

image

В этот момент я мог видеть финишную черту, но изначально этот экран меня озадачил. Я мог бы довольно легко нажать на поле Выбрать файл, но как я должен был выбрать нужный файл для загрузки? Ответ оказывается невероятно простым! Мы находим поле Choose File с помощью селектора и используем метод send_keys для передачи точного пути к файлу (называемого file_location в приведенном ниже коде) к блоку:

# Choose File buttonchoose_file = driver.find_element_by_name('attachments[0][uploaded_data]')# Complete path of the filefile_location = os.path.join(submission_dir, folder, file_name)# Send the file location to the buttonchoose_file.send_keys(file_location)


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

image

Теперь мы выбираем кнопку Отправить задание, нажимаем, и наше задание отправлено!

# Locate submit button and clicksubmit_assignment = driver.find_element_by_id('submit_file_button')submit_assignent.click()


image


Уборка


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

# Location of files after submissionsubmitted_file_location = os.path.join(submitted_dir, submitted_file_name)# Rename essentially copies and pastes filesos.rename(file_location, submitted_file_location)


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

Вот как это выглядит, когда я запускаю программу:

image

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

image

Пока программа работает, я могу наблюдать, как Python работает на меня:

image

Выводы


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

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

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

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Читать еще


Подробнее..

Перевод Гайд по DevOps для начинающих

06.07.2020 18:16:50 | Автор: admin
В чем важность DevOps, что он означает для ИТ-специалистов, описание методов, фреймворков и инструментов.

image

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

Что такое DevOps


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

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

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

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

Вызовы для команды разработчиков


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

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


Проблемы, с которыми сталкивается операционная группа


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

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


Как DevOps решает проблемы разработки и операций


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

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


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

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

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


image

Противостояние DevOps, Agile и традиционного IT


DevOps часто обсуждается в связи с другими ИТ-практиками, в частности, гибкой и водопадной ИТ-инфраструктурой.

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

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

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


Жизненный цикл DevOps


DevOps подразумевает принятие определенных общепринятых практик.

Непрерывное планирование


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

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


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

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


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

Непрерывные выпуск и развертывание


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

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

Непрерывный мониторинг


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

Постоянная обратная связь и оптимизация


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

image

Преимущества DevOps


DevOps может способствовать созданию среды, в которой разработчики и операторы работают как одна команда для достижения общих целей. Важной вехой в этом процессе является внедрение непрерывной интеграции и непрерывной доставки (CI/CD). Эти методики позволят командам быстрее выводить программное обеспечение на рынок с меньшим количеством ошибок.

Важными преимуществами DevOps являются:

  • Предсказуемость: DevOps предлагает значительно более низкую частоту отказов при выпуске новых релизов.
  • Поддерживаемость: DevOps обеспечивает легкое восстановление в случае сбоев в новом релизе или отключения приложения.
  • Воспроизводимость: Система контроля версий сборки или кода позволяет восстанавливать более ранние версии по мере необходимости.
  • Более высокое качество: Решение проблем с инфраструктурой улучшает качество разработки приложений.
  • Время выхода на рынок: Оптимизация доставки программного обеспечения сокращает время выхода на рынок на 50%.
  • Снижение риска: Обеспечение безопасности в жизненном цикле программного обеспечения снижает количество дефектов на протяжении всего жизненного цикла.
  • Экономическая эффективность: Стремление к экономической эффективности при разработке программного обеспечения нравится высшему руководству.
  • Устойчивость: Программная система более стабильна, безопасна, а изменения можно проверять.
  • Более крупная кодовая база разбивается на управляемые части: DevOps основан на гибких методах разработки, которые позволяют разбивать большую кодовую базу на более мелкие и управляемые части.


Принципы DevOps


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

Разрабатывайте и тестируйте в среде, похожей на производственную


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

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

Развертывание с воспроизводимыми, надежными процессами


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

Мониторинг и проверка качества работы


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

Усовершенствование циклов обратной связи


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

Dev


  • Планирование: Kanboard, Wekan и другие альтернативы Trello; GitLab, Tuleap, Redmine и другие альтернативы JIRA; Mattermost, Roit.im, IRC и другие альтернативы Slack.
  • Написание кода: Git, Gerrit, Bugzilla; Jenkins и другие инструменты с открытым исходным кодом для CI/CD
  • Сборка: Apache Maven, Gradle, Apache Ant, Packer
  • Тесты: JUnit, Cucumber, Selenium, Apache JMeter


Ops


  • Выпуск, развертывание, операции: Kubernetes, Nomad, Jenkins, Zuul, Spinnaker, Ansible, Apache ZooKeeper, etcd, Netflix Archaius, Terraform
  • Мониторинг: Grafana, Prometheus, Nagios, InfluxDB, Fluentd, и другие, покрытые в этом руководстве


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

В заключение


DevOps это все более популярная методология, целью которой является объединение разработчиков и операторов в единое целое. Она уникальна, отличается от традиционных IT-операций и дополняет Agile (но не является столь же гибкой).

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:




Полезное


Подробнее..

Перевод Самое грустное уравнение в Data Science

29.06.2020 18:10:05 | Автор: admin
image
Запаситесь носовыми платочками! Сейчас я расскажу вам всю правду о статистике и data science. У вас слезы на глаза навернутся, я вам обещаю.

ВВОД = ДАННЕ + ПРЕДПОЛОЖЕНИЯ. Другими словами, статистика не дает вам правду.

Распространенные мифы


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


Все это звучит как сказки, не так ли? Потому что это они и есть.

Горькая правда


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

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

Не ведитесь на слова этих позеров.

Не повторяйте судьбу Икара


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

В статистике то, что вы знаете это не то же самое, что вы хотели бы знать

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

Это не магия, это предположения


Как вообще можно перескочить от того, что вы знаете к тому чего не знаете? Вам нужен мост, чтобы преодолеть эту пропасть. И название этому мосту предположения. Напомню вам о самом болезненном уравнении в data science: ДАННЕ + ПРЕДПОЛОЖЕНИЯ = ПРОГНОЗИРОВАНИЕ.

ДАННЕ + ПРЕДПОЛОЖЕНИЯ = ПРОГНОЗИРОВАНИЕ.

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

Что такое предположение(assumption)?


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

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


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

Статистика это ваша попытка делать все, что в ваших силах, в мире неопределенности.

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

Предположения это часть принятия решений


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

Примеры: Когда вы читаете газету, вы предполагаете, что все факты проверены? Когда вы строили планы на 2020, вы предполагали, что не будет глобальной пандемии? Если вы анализировали данные, вы предполагали, что данные были записаны без ошибок? Вы предполагали, что ваш генератор случайных чисел дает случайные результаты? (Обычно они не случайны.) Когда вы решаете совершить покупку в интернете, вы предполагаете, что с вас будет списана верная сумма? Что насчет вашего последнего перекуса? Вы предполагали, что он не отравлен? Когда вы принимали лекарство, вы *знали* о его долговременном эффекте или предполагали?

Нравится вам это или нет, предположения часть принятия решений

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

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

Как творится магия статистики


В сфере статистики есть множество инструментов, позволяющих вам сформулировать предположения и объединить их с доказательствами. Так рождаются разумные решения. (Здесь можно посмотреть мое 8-минутное введение в статистику.)

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

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

image

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

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

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

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

Что там по поводу науки?


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

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

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

Итог


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

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

Вам нужно лишь делать предположения.

Перевод: Диана Шеремьёва

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Читать еще


Подробнее..

Категории

Последние комментарии

© 2006-2020, personeltest.ru