Магистратура ИИИИ от Физтеха и ВТБ: Data Science с человеческим лицом

В современном мире невозможно быть энциклопедистом. Со времён Вольтера и Дидро человечество накопило слишком много знаний, и они не поместятся в одну голову. Однако это не значит, что не стоит даже пытаться. Как говаривал Козьма Прутков, «специалист подобен флюсу». А флюс — штука нездоровая.

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

О времени и о себе

Я окончил МФТИ в 1994 году (факультет управления и прикладной математики). Анализом данных занимаюсь с 1990 года — получается, уже более 30 лет. Впрочем, все эти годы название области моей деятельности постоянно менялось: было и «распознавание образов», и «машинное обучение», и data mining. Для меня это не более чем периодическая смена флага под влиянием научной моды. Суть всегда оставалась неизменной — постоянно думать, как решить задачу.

Всё это время я работаю в Вычислительном центре РАН, которым руководил мой учитель (точнее, Учитель) академик Константин Владимирович Рудаков, к сожалению, недавно нас покинувший. В 2003 году он открыл специализацию «Интеллектуальный анализ данных» (ИАД). А с 2004 года я читаю на ИАД курс лекций по машинному обучению. В 2017 году под моим руководством была создана лаборатория машинного интеллекта МФТИ. В 2021 году я оставил её на попечение Алексея Гончарова, одного из выпускников, а сам возглавил новую кафедру — машинного обучения и цифровой гуманитаристики МФТИ.

Наряду с основной деятельностью, успел поработать много где: в институте Склифосовского, на ММВБ, в «Форексисе», «Яндексе», Сбербанке. Но никогда не переставал заниматься наукой. Просто разменивать своё время на деньги и карьерное продвижение всегда казалось мне банальным и слишком скучным. Научное познание мира — это, по моему глубокому убеждению, самое крутое, чем человек может заниматься по жизни. Но важно приобретать практический опыт, чтобы наука от этой самой жизни не отрывалась. Расширять кругозор и приумножать знания, чтобы затем передать свой опыт студентам.

Откуда есть пошла

Магистерская программа «Искусственный интеллект и интердисциплинарные исследования» (сокращённо ИИИИ) появилась не на пустом месте. На физтехе традиционно много программ по искусственному интеллекту — на разных кафедрах, с разными индустриальными и научными партнёрами. Машинное обучение давно присутствует в программе ФПМИ (физтех-школа прикладной математики и информатики). Так что с «машинной» стороны у ИИИИ крепкая база.

С интердисциплинарной стороны наша магистратура тоже опирается на богатый опыт. Помимо кафедры машинного обучения и цифровой гуманитаристики, в разработке программы участвовали Лаборатория междисциплинарного анализа, социума, культуры и истории (МАСКИ) и Центр обучения проектированию и разработке игр (ЦОПРИ). Причём здесь игры, поведаю чуть ниже, пока скажу лишь, что ЦОПРИ не только про игры. Точнее, не только про игры в узком смысле.

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

Обдумывая концепцию ИИИИ, мы не ориентировались на существующие интердисциплинарные программы, но, как оказалось, они есть — схожие не по содержанию, но по духу. Например, программа Эдинбургского университета Philosophy and Mathematics — и философия, и математика в ней даются крайне серьёзно. Совершенно замечательная инициатива есть и у Стэнфорда — Stanford Program in Science, Technology & Society. В ней три компонента: инженерный, научный и социогуманитарный.

T-shaped people

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

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

Незаметно, но неотвратимо наступил век T-shaped people. Хорошему специалисту уже недостаточно быть специалистом в смысле афоризма Пруткова. Нужно ещё то, что называют софт-скилами: умение общаться с людьми, работать в команде, руководить командой. Кроме того, нужно нечто большее, чем софт-скилы. Некое более общее понимание того, как устроен мир, как устроено общество. Узкий специалист может прекрасно понимать, как сделать что-то, но не понимать, что именно, а главное — зачем.

Это может прозвучать как прекрасная утопия, вроде советской педагогической максимы о «воспитании всесторонне развитой личности». Однако в последние годы бизнес всё лучше осознаёт свою потребность в таких сотрудниках. И наша совместная с ВТБ магистратура — наглядное тому подтверждение.

Программа ИИИИ состоит из компьютерных наук, софт-скилов и общегуманитарных предметов в соотношении примерно 3:1:1. Можно сказать, она тоже T-shaped. И бизнес заинтересован во всех этих составляющих. Например, именно по просьбе коллег из ВТБ мы включили в гуманитарную часть восточную философию. Никакого идеализма, лишь умный и дальновидный прагматизм.

Теперь, пожалуй, расскажу о каждом направлении подробнее.

Алгебра — царица полей

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

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

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

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

Добрым словом и револьвером

За софт-скиловую, коммуникативную часть магистратуры отвечает уже упоминавшийся выше ЦОПРИ — Центр обучения проектированию и разработке игр. И на то есть три веские причины.

Во-первых, несмотря на формальное название, ЦОПРИ — это не только про игры, но и про управление, про организацию разработки чего-либо в широком смысле. Руководитель ЦОПРИ Анна Кулашова — один из директоров «Лаборатории Касперского», в прошлом была топ-менеджером Microsoft. В общем, человек с очень богатым руководящим опытом. И все люди, которые читают курсы по коммуникации, обладают большим реальным опытом.

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

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

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

Тем не менее ИИИИ готовит не просто полководцев. Можно следовать правилам игры, а можно сделать их объектом изучения. Думать о них, о том, как они устроены, почему они именно такие и что будет, если их изменить. Это очень важный навык сейчас, когда технологии способны менять правила игры. Дальновидный разработчик должен задумываться о том, как изменится мир, когда в нём появится тот или иной продукт. Как станут вести себя люди, использующие его. Как говорится: «Что наша жизнь? Игра!».

Платон мне друг

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

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

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

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

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

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

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

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

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

Per aspera ad astra

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

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

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

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

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

Знающий геометрию да войдёт

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

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

Стоимость обучения — 390 тысяч рублей в год. Успеть записаться надо до 18 августа. Контактное лицо по всем вопросам — Дмитрий Базанов (пишите на bazanov@phystech.edu).

Что нужно сделать, чтобы попасть в программу?

1. Зарегистрироваться на сайте https://pk.mipt.ru/ и подать заявление.

  • Конкурсная группа: ФПМИ Математика, информатика и компьютерные технологии.

  • Кафедра машинного обучения и цифровой гуманитаристики.

  • Специализация (магистерская программа): искусственный интеллект и интердисциплинарные исследования.

2. На дистанционном экзамене 24 августа будет следующее:

  • алгебра, геометрия, линейная алгебра, матанализ, теория вероятностей, алгоритмы, комбинаторика, компьютерные науки (первые два раздела из программы экзамена по специальности: https://vk.cc/ceslHO); 

  • кроме того, будет кафедральное собеседование — поговорим о машинном обучении и о том, почему вам захотелось прийти именно на 4И.

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


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

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

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

Начну с финансового вопроса – сколько сможет заработать автор. Про него уже писали на Хабре, но я добавлю свои «пять копеек».

Сколько можно заработать на книге?

Скажу сразу, сколь-нибудь заметно заработать на выпуске книги, скорее всего, не получится. Творения малоизвестных авторов, у которых нет собственного ресурса для распространения, например, миллиона подписчиков в телеграм, обычно печатаются тиражами в 1-2 тыс. экземпляров. Авторский гонорар составляет от 5 до 25% с отпускной цены издательства (чаще всего 10%), которая обычно в полтора раза ниже средней розничной. Например, если книжка в розницу стоит 600 рублей, то автору достанется с нее около 40 рублей.

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

С электронной версии книги автору обычно платят чуть побольше – 10-30%, но возникает все тот же вопрос – кто будет продвигать вашу книгу? У издательств возможности ограниченные. Дело чаще всего ограничивается рассылкой по подписчикам и анонсом в их соцсетях. Розничные продавцы и интернет-магазины поставят книгу в ротацию на своих сайтах только если увидят на нее ажиотажный спрос. В остальном она будет доступна лишь поиском.

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

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

При каких условиях стоит начать писать?

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

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

Есть хороший пример по теме: вот тут Сергей Абдульманов (@Milfgard) делится своими опытом и впечатлениям от книги, созданной на основе серии постов с Хабра.

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

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

Дело в том, что тонкие брошюры в сотню страниц никто издавать не хочет! В книге должно быть минимум 160-200 страниц.

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

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

Что думают издательства про авторов?

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

Отдельно поставлю акцент на слове «выгодно». Издательства – это коммерческие компании. Они зарабатывают деньги. И, в первую очередь, они оценивают, сколько они смогут заработать на той или иной книге. Спасет ли эта книга мир – их не интересует. Им надо зарабатывать себе на хлеб. Все логично.

Например, на сайте МИФа в свое время было указано, что в месяц им приходит по 60-70 заявок от авторов и только 1-2 идут в работу. Я вижу три причины: издательство не видит коммерческого успеха, не верит в способности автора написать нормальную книгу, не понимает предложенной темы.

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

Мне в этом плане повезло. Я столкнулся с редактором издательства bhv Олегом Сивченко @OlegSivchenko который курирует темы, связанные с компьютерами и IT. Мы с ним говорили на одном языке, поэтому достаточно быстро ударили по рукам. Вдобавок он сотрудничает с Хабром и сам много и интересно пишет. В общем, если у вас есть планы на написание или издание книг айтишной тематики, я всячески рекомендую его.

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

Сколько времени займет работа над рукописью?

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

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

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

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

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

Создание рукописи – это только половина пути

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

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

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

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

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

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

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

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

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

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

Какие этапы предстоит пройти автору…

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

1. Поиск издательства

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

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

Далее начинается обсуждение деталей и условий. В случае достижения договоренностей начинается подготовка к подписанию договора.

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

2. Подписание договора

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

Еще раз подчеркну два момента. Первый – заранее прибавьте 15% к самым длинным срокам, которые вы себе установили на подготовку рукописи. Второй – разбейте работу над рукописью на пять-семь частей с отдельными сроками сдачи. Так намного удобнее контролировать ход написания книги и сократит общее время обработки рукописи в издательстве.

3. Работа над рукописью

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

4. Работа с редактором и литредактором

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

5. Предпечатная подготовка

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

В моем случае варианты были такие:

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

6. Выход книги из типографии

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

Из полезных идей – практически у каждого издательства есть свой интернет-магазин, в котором они могут предоставлять скидки. Соответственно, можно попросить промо-код на скидку в 15-20%, оговорив число применений, и делиться им, например, в закрытых профессиональных сообществах.

Сколько времени занимает весь цикл?

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

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


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


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

Все тот же Рассказ о том, как мы пилотный проект аттестации тестировщиков запускали – ч. 2

Привет, Хабр!

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

Начало работ

Вторая часть описания аналогична первой, но изменения в том, что оценка скиллов имеет пометку «на повышение»:

  • какие знания хотим проверить;

  • в какой области знаний необходима проверка;

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

  • какие участники аттестации требуются;

  • калькулятор оценки по баллам и т. д.

Определение набора знаний тестировщика 2 категории

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

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

  1. Адаптация на проекте;

  2. Работа с первичными документами проекта (требования, ТЗ, постановки и т. д.);

  3. Расширенные технические знания:

a. API-тестирование;

b. Запросы SQL.

  1. Коммуникативные навыки;

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

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

План оценивания для повышения грейда

Области оценивания следующие:

  1. Адаптация на проекте

  2. Функциональное тестирование

  3. Тест-анализ

  4. Тест-дизайн

  5. Технические навыки в тестировании

  6. Поддержка коммуникаций

Проверки, которые можно отнести к оцениванию:

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

  • Проведение опроса экспертов по тем же областям оценивания, кроме тест-дизайна;

  • Письменный тест технических навыков (например, написание SQL-запроса).

Подсчет результатов устных проверок

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

Расчет баллов для устного тестирования и для опроса экспертов
Расчет баллов для устного тестирования и для опроса экспертов

Подсчет результатов письменных тестов

Так как в нашем пилотном проекте решили ограничиться временем проверки скиллов тестировщика в 2 часа (*на самом деле ушло на 15 минут больше*), то и письменный тест не должен являться большим, но и не стоит забывать, что тестировщик 1 категории, который претендует на повышение грейда, имеет опыт в тестировании более 1 года. Поэтому мы ограничились тремя SQL-запросами по степени сложности (легкий, средний, сложный) с ограниченным временем написания.

И подсчет баллов к этой части аналогичен с устной частью.

Не стоит путать данный подсчет как «100 / 3», потому что устная часть и практическая калькулируются в одной таблице, где как раз-таки вопросы о написании SQL-запроса входят в состав «20 вопросов» из примера выше.

Подсчет суммы баллов всех тестов

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

сумма всех баллов делится на их количество
сумма всех баллов делится на их количество

Заключение

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

Например, если тестер 1-го уровня прошел аттестацию текущего грейда со 100% результатом, а в оценке повышенного уровня (от суммы всей компетенции, а не её части) набрал  50%, то следует ли его повышать, при минимальном пороге 60%, или оставить на текущем грейде, но повысить зарплату на 50%? Или еще пример, по текущим знаниям у тестера набралось 90% и в знаниях на повышение – 30%, то недостающие до стопроцентного результата 10% отнимаются от 30% и прибавляются к 90% ((30% — 10%) + 90%)? Который покрывает пробел текущего грейда (чтобы по текущим знаниям был стопроцентный результат)?

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

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

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


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

Ищем скрытые смыслы. Графовые нейронные сети на основе Spektral

Развитие методов глубокого машинного обучения привело к росту популярности нейронных сетей в задачах распознавания образов, машинного перевода, генерации изображений и текстов и многих других. С 2009 года нейронные сети попытались применить напрямую в задачах обработки графов (к которым могут относиться системы веб-страниц, связанных ссылками, словари с определенными отношениями между словами, граф социальных связей и другие) и среди возможных задач можно определить поиск кластеров узлов, создание новых графов на основе имеющейся информации о структуре графа, расширение графа и предсказание новых связей и другие. Сейчас выделяют несколько типов нейронных сетей на основе графов — сверточные графовые сети (Convolutional Graph Network), графовые изоморные сети (Graph Isomorphism Network) и многие другие и они часто используются для анализа цитирования статей, исследования текста (представление предложения как графа с указанием типов отношений между словами), изучения взаимосвязанных структур (например, исследования белковых молекул, в частности сеть Alphafold использует модель GNN) и т.д. В статье мы рассмотрим некоторые общие вопросы создания и обучения графовых сетей на основе библиотеки Python Spektral.

Внутри Spektral используется Keras и топология нейронной сети может быть заданы стандартными механизмами Keras Layers, но изначально предлагается большое количество преднастроенных моделей. В Spektral исходные данные для обучения сети представляются в виде экземпляров объектов spektral.data.Graph, который определяется 4 атрибутами:

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

  • x — свойства узлов (np.array со списком свойств)

  • e — свойства ребер (таблица связности, определяющая номера узлов, которые формируют ребро и список свойств ребра)

  • y — метки (одномерный или двумерный np.array для описания меток узлов или глобальных меток. В двумерном случае первый индекс — идентификатор узла, второй — идентификатор метки внутри узла, если их несколько)

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

Граф может быть сформирован как вручную, так и использованием вспомогательных загрузчиков, которые используют наборы данных из spektral.dataset.Dataset. Также представлено несколько готовых наборов данных по цитированию статей (пакет spectral.datasets.citation), reddit (spectral.datasets.graphsage.Reddit), описание структуры молекул QM9 (spektral.datasets.qm9.QM9) и многие другие.

Для исследования будем использовать базу данных цитирования Cora. Установим модуль pip install spektral и подготовим набор данных для дальнейшего обучения сети:

from spektral.datasets import Cora dataset = Cora() dataset  Cora(n_graphs=1)  dataset[0] Graph(n_nodes=2708, n_node_features=1433, n_edge_features=None, n_labels=7)

Полученный dataset представляет собой коллекцию графов (в нашем случае один граф), который состоит из 2708 узлов, 1433 свойств у каждого узла, 7 меток, свойства у ребер не определены. В реальных датасетах может быть представлено большое количество графов (например, в описании структуры молекул) и можно использовать методы filter / map / apply для отбора и модификации индивидуальных графов в наборе данных.

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

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

  • DisjointLoader объединяет несколько графов в один большой и преобразует его во входные векторы для нейронной сети

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

  • MixedLoader создает один большой граф, но при этом оставляет метки как независимые входные векторы

from spektral.data import SingleLoader loader = SingleLoader(dataset) loader.load()

Дальше создадим непосредственно нейронную сеть. Фактически основную задачу выполняют первые слои сети и нам доступно несколько вариантов графовых сетей в пакете spektral.layers (например, GCNConv — сверточные слои для Graph Convolutional Network, GraphSageConv для данных, собранных по алгоритму GraphSage и др., подробно о различиях в топологиях разных моделей графовых сетей можно почитать здесь). Сеть создается обычным для Keras способом, через реализацию Model:

class MyFirstGNN(Model):      def __init__(self, n_hidden, n_labels):         super().__init__()         self.graph_conv = GCNConv(n_hidden)       //собственно сама сеть         self.pool = GlobalSumPool()               //обобщение результатов         self.dropout = Dropout(0.5)//избегаем переобучения         self.dense = Dense(n_labels, 'softmax')//классификация по n_labels      def call(self, inputs):         out = self.graph_conv(inputs)         out = self.dropout(out)         out = self.pool(out)         out = self.dense(out)          return out

Дальше работа с сетью ничем не отличается от любых других реализаций сетей на основе Keras:

  • Создаем экземпляр модели

  • Компилируем модель с указанием функции потерь, оптимизатора и метрики

  • Обучаем модель на входных данных (получены после использования загрузчика)

  • Оцениваем точность модели

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

model = MyFirstGnn() model.compile(     optimizer=Adam(0.01),     loss=CategoricalCrossentropy(reduction="sum"),     weighted_metrics=["acc"], )  def mask_to_weights(mask):     return mask.astype(np.float32) / np.count_nonzero(mask)   weights_tr, weights_va, weights_te = (     mask_to_weights(mask)     for mask in (dataset.mask_tr, dataset.mask_va, dataset.mask_te) )  # sample_weight - веса, которые назначаются для ребер loader_tr = SingleLoader(dataset, sample_weights=weights_tr) loader_va = SingleLoader(dataset, sample_weights=weights_va) model.fit(     loader_tr.load(),     steps_per_epoch=loader_tr.steps_per_epoch,     validation_data=loader_va.load(),     validation_steps=loader_va.steps_per_epoch,     epochs=epochs,     callbacks=[EarlyStopping(patience=patience, restore_best_weights=True)], )

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

При написании статьи использовались материалы публикации Graph Neural Networks in TensorFlow and Keras with Spektral Daniele Grattarola and Cesare Alippi (https://arxiv.org/abs/2006.12138)

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


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

Работа с микросхемой АЦП MCP3301

1. Общая характеристика микросхемы MCP3301

Микросхема MCP3301 представляет собой 13-битный низкопотребляющий (до 450 мкА в активном режиме при питании  от источника 5 В) аналого-цифровой преобразователь (АЦП) последовательного приближения с дифференциальным входом и возможностью передачи данных по SPI-интерфейсу. Максимальная частота семплирования — 100 ksps. Опорное напряжение может быть выбрано из диапазона от 400 мВ до 5 В; получающийся при этом шаг преобразования: 98 мкВ и 1,22 мВ соответственно. MCP3301 доступен в 8-выводных MSOP, PDIP и SOIC корпусах.

2. Описание функционального назначения выводов микросхемы MCP3301

Таблица 1 — Функциональное назначение выводов микросхемы MCP3301

Наименование вывода

Функциональное назначение

1.

VREF

Опорное напряжение

2.

IN+

Положительный аналоговый вход

3.

IN-

Отрицательный аналоговый вход

4.

VSS

Общий

5.

CS/SHDN

Выбор ведомого устройства / режим ожидания

6.

DOUT

Данные, передаваемые по последовательному синхронному интерфейсу SPI

7.

CLK

Сигнал тактирования

8.

VDD

Питание микросхемы (4,5 В — 5,0 В)

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

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

Распиновка микросхемы приведена на рисунке 1.

Рисунок 1 — Распиновка микросхемы MCP3301
Рисунок 1 — Распиновка микросхемы MCP3301

В микросхеме MCP3301 используется аналого-цифровой преобразователь последовательного приближения. При таком аппаратном решении производится одновременное преобразование и сохранение значения разницы потенциалов на аналоговых входах микросхемы во внутренних схемах микросхемы за время, равное 1,5 тактовых циклов (tACQ). После этого схема удержания входного сигнала открывается, а аккумулированный заряд используется для получения данных, передаваемых последовательного в виде 13-битного дополнительного кода. Данный процесс преобразования управляется внешним тактирующим сигналом и должен включать 13 синхронизирующих импульсов: по одному на каждый бит. Во время этого процесса сначала выводится наиболее значимый бит (MSB). Этот бит является знаковым битом и указывает, находится ли вход IN+ или вход IN- с более высоким потенциалом.

3. Работа с последовательным интерфейсом

Микросхема передаёт значение напряжения в дополнительном коде: первым передаётся бит, индицирующий знак измеренного значения напряжения. Т. е., при превышении значения напряжения на аналоговом входе IN+ над величиной напряжения аналогового входа IN- знаковый бит устанавливается в ноль, если значение напряжения на аналоговом входе IN- выше значения  напряжения на аналогово входе IN+, знаковый бит устанавливается в единицу. Циклограмма процесса взаимодействия с микросхемой MCP3301 приведена на рисунке 2.

Рисунок 2 — Циклограмма процесса взаимодействия с микросхемой MCP3301 по интерфейсу SPI
Рисунок 2 — Циклограмма процесса взаимодействия с микросхемой MCP3301 по интерфейсу SPI

Связь с микросхемой MCP3301 обеспечивается с помощью стандартного последовательного интерфейса SPI. Инициализация связи производится посредством перевода линии выбора ведомого устройства CS в низкое состояние. При следующем переднем фронте тактового сигнала микросхема начинает операцию сэмплирования входного напряжения, которая завершается на заднем фронте синхроимпульса, одновременно с этим микросхема передаёт нулевой бит со значением “0”. Следующие 13 тактовых сигналов микросхема передаёт результат сэмплирования: 1-ый бит — знаковый бит, остальные 12 битов — измеренное значение (начиная с наибольшего значащего бита (MSB)). Данные передаются всегда на заднем фронте тактового сигнала.

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

Рисунок 3 — Циклограмма процесса взаимодействия с микросхемой MCP3301 в случае продолжения тактирования и установленным низким уровнем на линии выбора ведомого устройства CS
Рисунок 3 — Циклограмма процесса взаимодействия с микросхемой MCP3301 в случае продолжения тактирования и установленным низким уровнем на линии выбора ведомого устройства CS

В примере использовался микроконтроллер STM32F051. В качестве источника опорного напряжения использовалась микросхема MCP1541T (4,096 В). Аналоговый вход IN- подключён к общему выводу.

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

uint16_t adc_mcp3301_get_data(void) { uint16_t data;  ADC_MCP3301_ON;//CS-line driving low (launch the MCP3301) SPI2 -> CR1 |= SPI_CR1_SPE;//SPI enable while (LL_SPI_IsActiveFlag_RXNE(SPI2) == RESET);//waiting for SPI2 data reception SPI2 -> CR1 &= ~SPI_CR1_SPE;//SPI disable ADC_MCP3301_OFF;//CS-line driving high (MCP3301 standby mode) data =  LL_SPI_ReceiveData16(SPI2);//reading 16-Bits in the SPI data register data &= 0x1FFF;//bit mask applying (eliminating dummy 0-2 bits)  return data; }

На рисунках 4 — 6 представлены циклограммы процесса передачи битов данных, полученные с помощью логического анализатора с измеренным выходным напряжением — 1 мВ, 3,335 В и 313 мВ соответственно.

Рисунок 4 — Циклограмма процесса передачи битов данных (выходное напряжением - 1 мВ)
Рисунок 4 — Циклограмма процесса передачи битов данных (выходное напряжением — 1 мВ)
Рисунок 5 — Циклограмма процесса передачи битов данных (выходное напряжением - 3,335 В)
Рисунок 5 — Циклограмма процесса передачи битов данных (выходное напряжением — 3,335 В)
Рисунок 6 — Циклограмма процесса передачи битов данных (выходное напряжением - 313 мВ)
Рисунок 6 — Циклограмма процесса передачи битов данных (выходное напряжением — 313 мВ)

Файл для работы с микросхемой MCP3301 размещена на Github. Вся информация при работе с микросхемой MCP3301 была взята из соответствующей документации, размещённой на сайте производителя.


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