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

Программирование для начинающих

JetBrains Academy платформенные обновления, любимые проекты пользователей и годовая подписка

17.06.2021 14:15:17 | Автор: admin

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

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

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

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

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

  • Появилось два подготовительных трека для пользователей, только начинающих свое знакомство с программированием: Python for Beginners и Preparing for the AP Computer Science. Первый поможет сделать первые шаги в изучении Python, второй в изучении Java. После их прохождения вам будет легче перейти на треки Python Developer и Java Developer. Обратите внимание, что трек Preparing for the AP Computer Science находится на ранней стадии разработки и доступен бесплатно.

  • Мы создали два новых трека для более подробного изучения отдельных концепций Java и Python. Java Desktop Application Developer подойдет для совершенствования навыков написания десктопных приложений на Java. Natural Language Processing научит работе с текстовыми данными с помощью Python. Обратите внимание, что треки находятся на ранней стадии разработки и доступны бесплатно.

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

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

    Аналитика обучения пользователя JetBrains Academy Аналитика обучения пользователя JetBrains Academy
  • Появились персональные бейджи виртуальные награды за успешное обучение и помощь пользователям. Среди них: Committed Learner, Brilliant Mind, Helping Hand, Sweetheart и многие другие.

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

    Карта знаний. Раздел Computer science > Programming languages > Java > Code organization > Code styleКарта знаний. Раздел Computer science > Programming languages > Java > Code organization > Code style
  • Для ознакомления с JetBrains Academy теперь предлагается экскурсия, разъясняющая новым пользователями термины и концепции, которые важно знать при обучении на платформе.

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

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

    Возможные действия при работе с комментариями пользователей JetBrains AcademyВозможные действия при работе с комментариями пользователей JetBrains Academy

Любимые проекты пользователей

Со времен нашего прошлого поста мы добавили более 50 новых проектов, 300 тем и получили более 280 тысяч комментариев пользователей! Мы проанализировали любимые проекты наших пользователей и составили из них рейтинг тех, которые оказались наиболее полезными, увлекательными и простыми в понимании среди более чем 110 других проектов.

Java Developer

  1. Проект Simple Banking System. Работая над упрощенной версией банковской системы, вы изучите основы SQL и познакомитесь с алгоритмом Луна, помогающим избежать ошибок при вводе номера банковской карты.

    Что отмечают пользователи: практика ООП и структурирования кода, знакомство с базами данных через JDBC.

  2. Проект Tic-Tac-Toe with AI. Напишите собственную игру в крестики-нолики и сыграйте в нее с компьютером! Работая над этим проектом, вы узнаете о планировании и разработке сложных программ с нуля, научитесь использовать классы, объекты и методы в Java, обрабатывать ошибки и осуществлять ввод данных.

    Что отмечают пользователи: интересное применение рекурсии, углубленное ООП, знакомство с алгоритмом Минимакс.

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

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

Python Developer

  1. Проект Simple Banking System. Работая над упрощенной версией банковской системы, вы изучите основы SQL и познакомитесь с алгоритмом Луна, помогающим избежать ошибок при вводе номера банковской карты.

    Что отмечают пользователи: практика ООП и структурирования кода, работа с базами данных через SQLite.

  2. Проект Rock-Paper-Scissors.Предлагаем вам создать усовершенствованную версию игры камень-ножницы-бумага камень-ножницы-бумага-ящерица-спок а затем сыграть в нее против компьютера! Это хорошая тренировка навыков написания алгоритмов, работы с массивами, модулем random и форматированием строк.

    Что отмечают пользователи: работа с файлами и коллекциями.

  3. Проект To-Do List.Создайте свой список дел для управления повседневными задачами! Создавая эту программу, вы потренируетесь работать с циклами и условными операторами, а также изучите основы SQLAlchemy.

    Что отмечают пользователи: знакомство с базами данных через SQLAlchemy.

Kotlin Developer

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

    Что отмечают пользователи: практика ООП, особенно классов данных.

  2. Проект Tic-Tac-Toe. Напишите собственную игру в крестики-нолики и сыграйте в нее с компьютером! Работая над этим проектом, вы узнаете о планировании и разработке сложных программ с нуля, научитесь использовать классы, объекты и методы в Java, обрабатывать ошибки и осуществлять ввод данных.

    Что отмечают пользователи: отличная проработка основ Kotlin.

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

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

Годовая подписка

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

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

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

Мы всегда рады вашим комментариям здесь, в Twitter, Facebook и на Reddit! Они помогают нам развивать функциональность JetBrains Academy и делать проекты более качественными, полезными и увлекательными.

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

Ваша команда JetBrains Academy

Подробнее..

Где учиться программированию в Петербурге программы при поддержке JetBrains

22.06.2020 16:10:43 | Автор: admin
Мы заинтересованы в том, чтобы повышать образовательный уровень в IT-сфере, и готовы строить высшее образование вместе с вузом.

В этом посте мы расскажем об образовательных проектах в Петербурге, которые поддерживает JetBrains: о бакалаврских и магистерских программах в НИУ ВШЭ, ИТМО, СПбГУ и о Computer Science Center.



Бакалаврские программы:
Прикладная математика и информатика в НИУ ВШЭ Санкт-Петербург
Современное программирование в СПбГУ

Магистратура:
Разработка программного обеспечения / Software Engineering на базе Университета ИТМО
Машинное обучение и анализ данных в НИУ ВШЭ Санкт-Петербург
Программирование и анализ данных в НИУ ВШЭ Санкт-Петербург

Дополнительное образование:
Computer Science Center

В чем особенность наших программ?


Участие IT-компаний в обучении


Учебные программы разрабатываются при участии IT-компаний, чтобы давать действительно полезные знания. Курсы читают действующие программисты и учёные. Наши преподаватели: Виталий Брагилевский, Дмитрий Ицыксон, Александр Куликов, Евгений Линский, Денис Москвин, Александр Храбров, Алексей Шпильман.

Индивидуальный подход


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

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

Обратная связь


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

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

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


Студенты всех программ работают над семестровыми научно-исследовательскими проектами под руководством преподавателей или сотрудников компаний-партнёров. Так они получают опыт разработки в условиях, максимально приближенных к реальным. Задачи, которые они решают в рамках проектной работы, имеют научную или практическую ценность: например, магистранты Машинного обучения и анализа данных работали над плагином для улучшения поддержки естественного языка в IntelliJ IDEA. Смотрите примеры проектов студентов Computer Science Center или студентов Питерской Вышки: здесь, здесь и здесь.

Бакалавриат


Прикладная математика и информатика в НИУ ВШЭ Санкт-Петербург


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

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


Подробнее
Программа состоит из двух больших частей. На первом и втором годах обучения студенты проходят общеобразовательные дисциплины. Сразу начинаются математика, курс алгоритмов и программирование (на первом курсе годовой курс С++, затем годовой курс Java, а также Unix, Python, функциональное программирование и Haskell, операционные системы и так далее). С третьего года обучения у каждого студента появляется индивидуальная образовательная программа. Можно выбирать спецкурсы из нескольких базовых треков: машинное обучение и анализ данных, software engineering, языки программирования, теоретическая информатика, биоинформатика, низкоуровневое программирование.

Проектная деятельность начинается уже на первом курсе (на Хабре можно почитать статью первокурсников об игровом движке, который они написали на С++, другие примеры проектов есть в нашем Instagram). С третьего курса студенты решают практические задачи от компаний JetBrains, Яндекс, Ростелеком и др. Мы рассказали о некоторых проектах в нашем блоге на Хабре: Как учиться с помощью машинного обучения у экспертов в Dota 2, Как я научила робота бегать по видео с YouTube, Mountain Car: решаем классическую задачу при помощи обучения с подкреплением

Стипендии. Все студенты, которые сдают экзамены без троек, получают спонсорскую стипендию от JetBrains. Она составляет 9-15 тыс. рублей в месяц и зависит от среднего балла. Отличники, а также победители и призеры Всероссийской олимпиады школьников могут претендовать на дополнительные стипендии, и в сумме получать 20-25 тыс рублей в месяц.

Место. Все занятия проходят в отдельном корпусе (отремонтирован в 2019 году) по адресу ул. Кантемировская, д.3А.

42 бюджетных места, 40 платных мест

Полезные ссылки:
Чат программы в Telegram
Блог Питерской Вышки на Хабре
Отзывы студентов

Бакалавриат Современное программирование на факультете математики и компьютерных наук СПбГУ


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

На первых курсах студенты изучают необходимые базовые предметы, а на третьем и четвертом составляют себе индивидуальную траекторию обучения, выбирая из ста с лишним математических спецкурсов. Курсы читают ученые из России и из-за рубежа и разработчики IT-компаний. Во время учебы можно посещать открытые научные семинары лаборатории имени П.Л. Чебышева под руководством С.К. Смирнова, лауреата премии Филдса.

Бакалавриат лидер по количеству призёров Всероссийской олимпиады школьников в 2015-2019 г. в России. Учиться сложно и интересно: рассказ студентки об обучении на первом курсе программы.

Подробнее
Что в программе. Алгебра, дискретная математика, математический анализ. Алгоритмы и структуры данных, C++, парадигмы и языки программирования, функциональное программирование, Java, принципы организации и архитектура компьютерных систем и другие курсы по математике и программированию. Смотрите подробный учебный план и список спецкурсов, доступных для выбора на третьем и четвертом годах обучения.

Помимо учёбы можно заниматься спортивным программированием под руководством тренера сборной СПбГУ.

Программа готовит IT-специалистов: бэкенд- и веб-разработчиков, аналитиков и не только.

Преподаватели: Александр Куликов, Виталий Брагилевский, Денис Москвин, Фёдор Бахарев, Дмитрий Ицыксон, Евгений Линский и другие.

Практические проекты. С первого курса ребята работают над проектами под руководством специалистов IT-компаний. Например, в этом году они сделали веб-приложение Big sister, которое отслеживает активность студентов в течение семестра. Другие проекты: ассистент поэта сервис генерации стихотворений на русском языке; игра в жанре 2D-платформер; тренажёр для публичных выступлений; графическая программа под Android.

Стипендии. Студенты, поступившие без вступительных испытаний, получают спонсорские стипендии JetBrains от 10 до 15 тысяч рублей. В дальнейшем спонсорская стипендия платится по результатам успеваемости. Студенты также получают дополнительные стипендии от государства (например, стипендию КНВШ).

Место. Лекции проходят в историческом центре Петербурга на Васильевском острове.

30 бюджетных мест, 8 платных мест

Полезные ссылки:
Статья о программе на РБК
Блог первокурсника СП
Чат с руководителями программы для поступающих в 2020 году

Магистратура


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

На Программировании и анализе данных в Питерской Вышке ждут выпускников бакалаврских программ с углубленным изучением программирования и математики. Здесь учится большинство выпускников Прикладной математики и информатики НИУ ВШЭ Санкт-Петербург.

Разработка программного обеспечения / Software Engineering на базе Университета ИТМО



В магистерской программе Разработка программного обеспечения / Software Engineering много очных занятий и самостоятельной работы над практическими задачами и проектами.

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

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

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

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

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

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

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

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

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

30 бюджетных мест, 5 платных мест

Полезные ссылки:
Чат программы в Telegram
Интервью со студентами

Машинное обучение и анализ данных в НИУ ВШЭ Санкт-Петербург


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

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

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

Проекты. JetBrains тесно сотрудничает с программой Машинное обучение и анализ данных. Компания предлагает научно-исследовательские проекты для студентов, приглашает на стажировки, а часть ее сотрудников преподаёт дисциплины магистратуры. Ещё работать над проектами можно в Центре анализа данных и машинного обучения НИУ ВШЭ Санкт-Петербург. Им заведует Алексей Александрович Шпильман преподаватель Питерской Вышки и руководитель лабораторий Прикладное машинное обучение и глубинное обучение и Агентные системы и обучение с подкреплением в JetBrains Research. Студенты проходят летние стажировки и выполняют проекты в этих лабораториях или в других партнёрских компаниях программы.

Стипендии. Спонсорскую стипендию JetBrains от 10 000 до 15 000 рублей в месяц получают те, кто учится без троек. Размер стипендии зависит от успеваемости.

Место. Занятия проходят в отдельном корпусе (отремонтирован в 2019 году) по адресу ул. Кантемировская, д.3А

10 бюджетных мест, 10 мест за счет средств НИУ ВШЭ, 5 платных мест

Полезные ссылки:
Чат в Telegram
Статья о программе
Запись вебинара о программе

Программирование и анализ данных


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

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


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

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

Стипендии. Именные стипендии размером до 15 000 рублей выплачивают компании-партнёры.

Место. Занятия проходят в отдельном корпусе (отремонтирован в 2019 году) по адресу ул. Кантемировская, д.3А

15 бюджетных мест, 5 мест за счет средств НИУ ВШЭ, 5 платных мест

Полезные ссылки:
Чат в Telegram
Рассказ студентки о программе
Запись вебинара о программе

Дополнительное образование в CS центре


Computer Science Center это совместная инициатива Computer Science клуба, компании JetBrains и Школы анализа данных Яндекса.

Программа. Центр предлагает двух- или трёхлетние очные вечерние курсы в Санкт-Петербурге и Новосибирске, чтобы талантливые студенты и выпускники вузов развивались в направлениях Computer Science, Data Science или Software Engineering. Программа состоит из базовых курсов по каждому направлению, курсов по выбору и практики или научно-исследовательской работы. Примеры практических проектов наших студентов.

Преподаватели. Учёные, сотрудники JetBrains, Яндекса, выпускники центра. Чтобы познакомиться с программой и преподавателями, смотрите курсы, опубликованные на YouTube.

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

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

Полезные ссылки:
Видео об атмосфере в CS центре
Онлайн-курсы центра на Stepik
Записи открытых лекций центра
Канал для поступающих в 2020 году: там много ответов на вопросы

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

Перевод Как вернуть сразу несколько значений из функции в Python 3

28.08.2020 14:05:29 | Автор: admin
Сегодня мы делимся с вами переводом статьи, которую нашли на сайте medium.com. Автор, Vivek Coder, рассказывает о способах возврата значений из функции в Python и объясняет, как можно отличить друг от друга разные структуры данных.


Фото с сайта Unsplash. Автор: Vipul Jha

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

def hours_to_write(happy_hours):   week1 = happy_hours + 2   week2 = happy_hours + 4   week3 = happy_hours + 6   return [week1, week2, week3] print(hours_to_write(4))# [6, 8, 10]

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

Способ 1: возврат значений с помощью словарей


Словари содержат комбинации элементов, которые представляют собой пары ключ значение (key:value), заключенные в фигурные скобки ({}).

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

people={  'Robin': 24,  'Odin': 26,  'David': 25}

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

# A Python program to return multiple values using dictionary# This function returns a dictionary def people_age():     d = dict();     d['Jack'] = 30    d['Kim'] = 28    d['Bob'] = 27    return dd = people_age() print(d)# {'Bob': 27, 'Jack': 30, 'Kim': 28}

Способ 2: возврат значений с помощью списков


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

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

# A Python program to return multiple values using list def test():     str1 = "Happy"    str2 = "Coding"    return [str1, str2]; list = test() print(list)# ['Happy', 'Coding']

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

def natural_numbers(numbers = []):      for i in range(1, 16):       numbers.append(i)   return numbers print(natural_numbers())# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

Способ 3: возврат значений с помощью кортежей


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

Кортежи напоминают списки, однако их нельзя изменить после того, как они были объявлены. А еще, как правило, кортежи быстрее в работе, чем списки. Кортеж можно создать, отделив элементы запятыми: x, y, z или (x, y, z).

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

Bob = ("Bob", 7, "Google")

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

# A Python program to return multiple values using tuple# This function returns a tuple def fun():     str1 = "Happy"    str2 = "Coding"    return str1, str2; # we could also write (str1, str2)str1, str2= fun() print(str1) print(str2)# Happy  Coding

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

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

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

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

def student(name, class):   return (name, class)print(student("Brayan", 10))# ('Brayan', 10)

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

Способ 4: возврат значений с помощью объектов


Тут все так же, как в C/C++ или в Java. Можно просто сформировать класс (в C он называется структурой) для сохранения нескольких признаков и возврата объекта класса.

# A Python program to return multiple values using class class Intro:  def __init__(self):   self.str1 = "hello"  self.str2 = "world"# This function returns an object of Introdef message():  return Intro()  x = message() print(x.str1) print(x.str2)# hello  world

Способ 5: возврат значений с помощью классов данных (Python 3.7+)


Классы данных в Python 3.7+ как раз помогают вернуть класс с автоматически добавленными уникальными методами, модулем typing и другими полезными инструментами.

from dataclasses import dataclass@dataclassclass Item_list:    name: str    perunit_cost: float    quantity_available: int = 0    def total_cost(self) -> float:        return self.perunit_cost * self.quantity_available    book = Item_list("better programming.", 50, 2)x = book.total_cost()print(x)print(book)# 100  Item_list(name='better programming.', perunit_cost=50,   quantity_available=2)

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

Вывод


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

Учите матчасть и постоянно развивайте свои навыки программирования. Спасибо за внимание!
Подробнее..

Из песочницы Файловый менеджер на питоне в 430 строк для начинающих и чайников

01.11.2020 04:06:50 | Автор: admin
Всем привет!

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



Внимание!
Это всего лишь игрушка и не более, это не реальная ОС!

Импорт библиотек:

import tkinterimport osimport subprocessfrom tkinter import messageboxfrom tkinter import simpledialog

Главное меню:

class MainContextMenu(tkinter.Menu):''' Контекстное меню для внутренней области директории'''def __init__(self, main_window, parent):super(MainContextMenu, self).__init__(parent, tearoff = 0)self.main_window = main_windowself.add_command(label="Создать директорию", command = self.create_dir)self.add_command(label="Создать файл", command = self.create_file)def popup_menu(self, event):''' функция для активации контекстного меню'''#если активны другие меню - отменяем ихif self.main_window.file_context_menu:self.main_window.file_context_menu.unpost()if self.main_window.dir_context_menu:self.main_window.dir_context_menu.unpost()self.post(event.x_root, event.y_root)def create_dir(self):''' функция для создания новой директории в текущей'''dir_name = simpledialog.askstring("Новая директория", "Введите название новой директории")if dir_name:command = "mkdir {0}".format(dir_name).split(' ')#выполняем команду отдельным процессомprocess = subprocess.Popen(command, cwd=self.main_window.path_text.get(), stdout = subprocess.PIPE, stderr = subprocess.PIPE)out, err = process.communicate()#при возникновении ошибки выводим сообщениеif err:messagebox.showwarning("Операция невозможна!","Отказано в доступе.")self.main_window.refresh_window()def create_file(self):''' функция для создания нового файла в текущей директории'''dir_name = simpledialog.askstring("Новый файл", "Введите название нового файла")if dir_name:command = "touch {0}".format(dir_name).split(' ')#выполняем команду отдельным процессомprocess = subprocess.Popen(command, cwd=self.main_window.path_text.get(), stdout = subprocess.PIPE, stderr = subprocess.PIPE)out, err = process.communicate()#при возникновении ошибки выводим сообщениеif err:messagebox.showwarning("Операция невозможна!","Отказано в доступе.")self.main_window.refresh_window()def insert_to_dir(self):''' функция для копирования файла или директории в текущую директорию'''copy_obj = self.main_window.buffto_dir = self.main_window.path_text.get()if os.path.isdir(self.main_window.buff):#выполняем команду отдельным процессомprocess = subprocess.Popen(['cp', '-r', copy_obj, to_dir], stdout = subprocess.PIPE, stderr = subprocess.PIPE)out, err = process.communicate()if err:messagebox.showwarning("Операция невозможна!", err.decode("utf-8"))else:#выполняем команду отдельным процессомprocess = subprocess.Popen(['cp', '-n', copy_obj, to_dir], stdout = subprocess.PIPE, stderr = subprocess.PIPE)out, err = process.communicate()#при возникновении ошибки выводим сообщениеif err:messagebox.showwarning("Операция невозможна!",err.decode("utf-8"))self.main_window.refresh_window()

При нажатии на файл должно выводиться контекстное меню:

image

class FileContextMenu(tkinter.Menu):def __init__(self, main_window, parent):super(FileContextMenu, self).__init__(parent, tearoff = 0)self.main_window = main_windowself.add_command(label="Открыть файл", command = self.open_file)self.add_separator()self.add_command(label="Копировать", command = self.copy_file)self.add_command(label="Переименовать", command = self.rename_file)self.add_separator()self.add_command(label="Удалить", command = self.delete_file)def open_file(self):''' функция для открытия файла сторонними программами'''ext = self.main_window.take_extention_file(self.main_window.selected_file)full_path = self.main_window.path_text.get() + self.main_window.selected_fileif ext in ['txt', 'py', 'html', 'css', 'js']:if 'mousepad' in self.main_window.all_program:subprocess.Popen(["mousepad", full_path], start_new_session = True)else:self.problem_message()elif ext == 'pdf':if 'evince' in self.main_window.all_program:subprocess.run(["evince", full_path], start_new_session = True)else:self.problem_message()elif ext in ['png', 'jpeg', 'jpg', 'gif']:if 'ristretto' in self.main_window.all_program:subprocess.run(["ristretto", full_path], start_new_session = True)else:self.problem_message()else:self.problem_message()def problem_message(self):messagebox.showwarning("Проблема при открытии файла", 'Прости, но я не могу открыть этот файл')def copy_file(self):''' функция для копирования файла'''#заносим полный путь к файлу в буфферself.main_window.buff = self.main_window.path_text.get() + self.main_window.selected_fileself.main_window.refresh_window()def delete_file(self):''' функция для удаления выбранного файла'''full_path = self.main_window.path_text.get() + self.main_window.selected_file#выполняем команду отдельным процессомprocess = subprocess.Popen(['rm', full_path], stdout=subprocess.PIPE, stderr=subprocess.PIPE)output, err = process.communicate()#при возникновении ошибки выводим сообщениеif err:messagebox.showwarning("Проблема при удалении файла", 'У Вас нет прав для удаления данного файла')self.main_window.refresh_window()def rename_file(self):''' функция для переименования выбранного файла'''new_name = simpledialog.askstring("Переименование файла", "Введите новое название файла")if new_name:old_file = self.main_window.path_text.get() + self.main_window.selected_filenew_file = self.main_window.path_text.get() + new_name#выполняем команду отдельным процессомprocess = subprocess.Popen(['mv', old_file, new_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE)output, err = process.communicate()#при возникновении ошибки выводим сообщениеif err:messagebox.showwarning("Проблема при переименовании файла", 'У Вас нет прав для переименования данного файла')self.main_window.refresh_window()def popup_menu(self, event):''' функция для активации контекстного меню'''self.post(event.x_root, event.y_root)#если активны другие меню - отменяем ихif self.main_window.main_context_menu:self.main_window.main_context_menu.unpost()if self.main_window.dir_context_menu:self.main_window.dir_context_menu.unpost()self.main_window.selected_file = event.widget["text"]

То же самое для директории:

class DirContextMenu(tkinter.Menu):def __init__(self, main_window, parent):super(DirContextMenu, self).__init__(parent, tearoff = 0)self.main_window = main_windowself.add_command(label="Переименовать", command = self.rename_dir)self.add_command(label="Копировать", command = self.copy_dir)self.add_separator()self.add_command(label="Удалить", command = self.delete_dir)def copy_dir(self):''' функция для копирования директории'''self.main_window.buff = self.main_window.path_text.get() + self.main_window.selected_fileself.main_window.refresh_window()def delete_dir(self):''' функция для удаления выбранной директории'''full_path = self.main_window.path_text.get() + self.main_window.selected_fileif os.path.isdir(full_path):#выполняем команду отдельным процессомprocess = subprocess.Popen(['rm', '-rf', full_path], stdout=subprocess.PIPE, stderr=subprocess.PIPE)output, err = process.communicate()#при возникновении ошибки выводим сообщениеif err:messagebox.showwarning("Проблема при удалении директории", 'У Вас нет прав для удаления данной директории')self.main_window.refresh_window()def rename_dir(self):''' функция для переименования выбранной директории'''new_name = simpledialog.askstring("Переименование директории", "Введите новое название директории")if new_name:old_dir = self.main_window.path_text.get() + self.main_window.selected_filenew_dir = self.main_window.path_text.get() + new_name#выполняем команду отдельным процессомprocess = subprocess.Popen(['mv', old_dir, new_dir], stdout=subprocess.PIPE, stderr=subprocess.PIPE)output, err = process.communicate()#при возникновении ошибки выводим сообщениеif err:messagebox.showwarning("Проблема при переименовании директории", 'У Вас нет прав для переименования данной директории')self.main_window.refresh_window()def popup_menu(self, event):''' функция для активации контекстного меню'''self.post(event.x_root, event.y_root)#если активны другие меню - отменяем ихif self.main_window.main_context_menu:self.main_window.main_context_menu.unpost()if self.main_window.file_context_menu:self.main_window.file_context_menu.unpost()self.main_window.selected_file = event.widget["text"]

Класс основного окна:

class MainWindow():''' Класс основного окна'''def __init__(self):self.root = tkinter.Tk()self.root.title("FileManager")self.root.resizable(width = False, height = False)self.root.geometry('450x300')self.hidden_dir = tkinter.IntVar()self.buff = Noneself.all_program = os.listdir('C:/')self.root.bind('<Button-1>', self.root_click)self.root.bind('<FocusOut>', self.root_click)#top frameself.title_frame = tkinter.Frame(self.root)self.title_frame.pack(fill = 'both', expand = True)#back buttonself.back_button = tkinter.Button(self.title_frame, text = "..", command = self.parent_dir, width = 1, height = 1)self.back_button.pack(side = 'left')#path entryself.path_text = tkinter.StringVar()self.path_text.set('/')self.current_path = tkinter.Entry(self.title_frame, textvariable = self.path_text, width = 40, state='readonly')self.current_path.pack(side = 'left')#button show/hidde hidden dir/fileself.check_button = tkinter.Checkbutton(self.title_frame, text = "Hidden", font = ("Helvetica", 10), padx = 1, pady = 1, variable = self.hidden_dir, command = self.refresh_window)self.check_button.pack(side = 'left')#main frameself.main_frame = tkinter.Frame(self.root)self.main_frame.pack()# scroll barself.scrollbar_vert = tkinter.Scrollbar(self.main_frame, orient="vertical")self.scrollbar_vert.pack(side = 'right', fill = 'y')self.scrollbar_hor = tkinter.Scrollbar(self.main_frame, orient="horizontal")self.scrollbar_hor.pack(side = 'bottom', fill = 'x')#canvasself.canvas = tkinter.Canvas(self.main_frame, borderwidth=0,  bg = 'white')self.inner_frame = tkinter.Frame(self.canvas,  bg = 'white')#команды для прокруткиself.scrollbar_vert["command"] = self.canvas.yviewself.scrollbar_hor["command"] = self.canvas.xview#настройки для canvasself.canvas.configure(yscrollcommand=self.scrollbar_vert.set, xscrollcommand = self.scrollbar_hor.set, width=400, heigh=250)self.canvas.pack(side='left', fill='both', expand=True)self.canvas.create_window((0,0), window=self.inner_frame, anchor="nw")#отрисовываем содержимое лиректорииself.dir_content()def root_click(self, event):''' функция для обработки события клика в root'''#если есть контекстные меню - отменяемif self.file_context_menu:self.file_context_menu.unpost()if self.main_context_menu:self.main_context_menu.unpost()if self.dir_context_menu:self.dir_context_menu.unpost()def dir_content(self):''' функция для определения содержимого текущей директории'''#содержимое в текущей директорииdir_list = os.listdir(self.path_text.get())path = self.path_text.get()if not dir_list:#общее контекстное менюself.main_context_menu = MainContextMenu(self, self.canvas)self.canvas.bind('<Button-3>', self.main_context_menu.popup_menu)if self.buff:self.main_context_menu.add_command(label="Вставить", command = self.main_context_menu.insert_to_dir)self.inner_frame.bind('<Button-3>', self.main_context_menu.popup_menu)#контекстное меню для файловself.file_context_menu = None#контекстное меню для директорииself.dir_context_menu = Nonereturn None#общее контекстное менюself.main_context_menu = MainContextMenu(self, self.canvas)self.canvas.bind('<Button-3>', self.main_context_menu.popup_menu)if self.buff:self.main_context_menu.add_command(label="Вставить", command = self.main_context_menu.insert_to_dir)#контекстное меню для файловself.file_context_menu = FileContextMenu(self, self.inner_frame)#контекстное меню для директорииself.dir_context_menu = DirContextMenu(self, self.inner_frame)i = 0for item in dir_list:if os.path.isdir(str(path) + item):#обрабатываем директорииif os.access(str(path) + item, os.R_OK):if (not self.hidden_dir.get() and  not item.startswith('.')) or self.hidden_dir.get():photo = tkinter.PhotoImage(file ="img/folder.png")icon = tkinter.Label(self.inner_frame, image=photo,  bg = 'white')icon.image = photoicon.grid(row=i+1, column=0)folder_name = tkinter.Label(self.inner_frame, text=item,  bg = 'white', cursor = 'hand1')folder_name.bind("<Button-1>", self.move_to_dir)folder_name.bind("<Button-3>", self.dir_context_menu.popup_menu)folder_name.grid(row=i+1, column=1, sticky='w')else:if (not self.hidden_dir.get() and not item.startswith('.')) or self.hidden_dir.get():photo = tkinter.PhotoImage(file ="img/folder_access.png")icon = tkinter.Label(self.inner_frame, image=photo,  bg = 'white')icon.image = photoicon.grid(row=i+1, column=0)folder_name = tkinter.Label(self.inner_frame, text=item,  bg = 'white')folder_name.bind("<Button-1>", self.move_to_dir)folder_name.grid(row=i+1, column=1, sticky='w')else:#обрабатываем файлыif (not self.hidden_dir.get() and not item.startswith('.')) or self.hidden_dir.get():ext = self.take_extention_file(item)#фото, картинкиif ext in ['jpeg', 'jpg', 'png', 'gif']:photo = tkinter.PhotoImage(file ="img/photo.png")icon = tkinter.Label(self.inner_frame, image=photo,  bg = 'white')icon.image = photoicon.grid(row=i+1, column=0)file_name = tkinter.Label(self.inner_frame, text=item,  bg = 'white')file_name.grid(row=i+1, column=1, sticky='w')file_name.bind("<Button-3>", self.file_context_menu.popup_menu)else:#другие файлыif os.access(str(path) + item, os.R_OK):photo = tkinter.PhotoImage(file ="img/file.png")icon = tkinter.Label(self.inner_frame, image=photo,  bg = 'white')icon.image = photoicon.grid(row=i+1, column=0)folder_name = tkinter.Label(self.inner_frame, text=item,  bg = 'white')folder_name.grid(row=i+1, column=1, sticky='w')folder_name.bind("<Button-3>", self.file_context_menu.popup_menu)else:photo = tkinter.PhotoImage(file ="img/file_access.png")icon = tkinter.Label(self.inner_frame, image=photo,  bg = 'white')icon.image = photoicon.grid(row=i+1, column=0)folder_name = tkinter.Label(self.inner_frame, text=item,  bg = 'white')folder_name.grid(row=i+1, column=1, sticky='w')i += 1#обновляем inner_frame и устанавливаем прокрутку для нового содержимогоself.inner_frame.update()self.canvas.configure(scrollregion=self.canvas.bbox("all"))def move_to_dir(self, event):''' функция для перехода в выбранную директорию'''elem = event.widgetdir_name = elem["text"]fool_path = self.path_text.get() + dir_nameif os.path.isdir(fool_path) and os.access(fool_path, os.R_OK):old_path = self.path_text.get()self.path_text.set(old_path + dir_name + '/')self.root_click('<Button-1>')self.refresh_window()def parent_dir(self):''' функция для перемещения в родительскую директорию'''old_path = [i for i in self.path_text.get().split('/') if i]new_path = '/'+'/'.join(old_path[:-1])if not new_path:new_path = '/'if os.path.isdir(new_path):if new_path == '/':self.path_text.set(new_path)else:self.path_text.set(new_path + '/')self.refresh_window()def take_extention_file(self, file_name):''' функция для получения расширения файла'''ls = file_name.split('.')if len(ls)>1:return ls[-1]else:return Nonedef refresh_window(self):''' функция для обновления текущего отображения директорий/файлов'''for widget in self.inner_frame.winfo_children():widget.destroy()self.dir_content()self.canvas.yview_moveto(0)

И наконец, создание окна и запаковка виджетов:

win = MainWindow()win.root.mainloop()

Файлы, ассеты, бинарники здесь

Буду рад, если вы поделитесь со мной улучшенной версией этой программы!
Пишите: ki1killer@yandex.ru
Подробнее..

Перевод WebRTC для любопытных (часть 1)

02.06.2021 08:23:30 | Автор: admin

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

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

Итак, часть 1 - вводная.


Что такое Webrtc?

Web Real-Time Communication или сокращенно WebRTC, является и протоколом и API одновременно. WebRTC как протокол - это множество правил для безопасного обмена информацией (обычно медиа) в режиме дуплекс между двумя агентами в сети. WebRTC как API в свою очередь позволяет разработчикам работать с протоколом. API формально определено только для JavaScript.

Такое же разделение и в отношении HTTP и Fetch API: WebRTC-протокол - это как HTTP, а WebRTC API - это как Fetch API в данном случае.

Помимо JavaScript протокол WebRTC реализован также и на других языках програмирования. Можно найти множество реализаций серверов, библиотек, реализующих протокол, примером может стать реализация на go pion/webrtc. Пишется реализация и на rust: https://github.com/webrtc-rs/webrtc (проект довольно интересный, потому что это переписываение pion/webrtc на rust).

Протокол WebRTC поддерживается в IETF в группе rtcweb. API WebRTC задокументировано в W3C как webrtc-pc.

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

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

Итак, приемущества WebRTC:

  • Открытый стандарт

  • Множество различных реализаций

  • Можно работать прямо из браузера

  • Обязательное шифрование

  • NAT Traversal

  • Перепрофилированная существующая технология, то есть не изобретали колес, когда делали WebRTC

  • Контроль за перегруженностью

  • Задержка (latency, имеется в виду задержка аудио и/или видеопотока) в пределах 1 секунды

WebRTC это набор разных технологий

Это тема, для объяснения которой потребуется целая книга. Для начала разобъем ее на четыре части:

  • Сигналинг

  • Соединение пиров

  • Безопасность

  • Общение пиров

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

Интересный факт в WebRTC это то, что каждый шаг использует множество других протоколов!

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

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

Сигналинг или как агенты находят друг друга в сети

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

Сигналинг использует существующий протокол SDP (Session Description Protocol). SDP это простой текстовый протокол. Каждое SDP-сообщение состоит из пар ключ-значение, расположенных в строгом порядке (rfc4566), которые в свою очередь составляют набор медиа-секций. SDP-сообщения, которыми обмениваются WebRTC-агенты содержит такую информацию как:

  • адреса IP и порты агентов, по которым можно соединиться с агентом (это т.н. ICE-кандидаты)

  • сколько аудио и видео треков агент желает отправить

  • какие аудио и видео кодеки поддерживает каждый из агентов

  • значения используемые во время соединения (uFrag/uPwd).

  • значения используемые для безопасности (отпечаток сертификата)

Отметим, что сигналинг обычно работает как бы в сторонке; то есть приложения не используют WebRTC для обмена SDP сообщениями. Тут подходит любой способ обмена этими сообщениями: REST, Websocket, да хоть письмом по почте можно отправить другому пиру SDP-сообщение, а тот в свою очередь отправит свое. В своем приложении для тестов я вообще использовал firebase для сигналинга.

Установка соединения и NAT Traversal с помощью STUN/TURN

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

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

Настоящая магия здесь это т.н. NAT Traversal и STUN/TURN сервера. Обе эти концепции необходимы для соединения с ICE агентом из другой сетки. Далее мы изучим этот вопрос глубже.

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

Шифрование передачи информации с помощью DTLS и SRTP

После того как мы установили дуплексную связь между двумя пирами через ICE, нам необходимо установить шифрованное соединение для обеспечения безопасности при передаче данных. Это обеспечиватся двумя протоколами, которые также предваряют WebRTC: DTLS (Datagram Transport Layer Security), который просто добавляет слой TLS над UPD. (TLS - криптографический протокол используемый для безопасного обмена через https). Второй протокол - это SRTP (Secure Real-time Transport Protocol).

Сначала WebRTC выполняет DTLS-"рукопожатие" через соединение установленное ранее через ICE. В отличие от HTTPS WebRTC не использует CA для сертификатов. Вместо этого просто сверяет отпечатки сертификатов, полученных в ходе обмена SDP-сообщениями на этапе сигналинга. Установленное DTLS соединение далее используется для DataChannel, для обмена простыми данными - бинарными или текстовыми, например сообщения в чате.

Для видео/аудио в WebRTC используется другой протокол: RTP. Для шифрования RTP-пакетов используется протокол SRTP. SRTP сессия инициализируется с помощью ключей шифрования полученных в ходе DTLS сессии (rfc5764). Далее мы обсудим, почему для медиа-данных используется свой собственный протокол.

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

Общение между пирами через RTP и SCTP

Сейчас мы имеем два WebRTC-агента с безопасным двунаправленным соединением. Давайте начнем взаимодействие! И снова мы используем уже существующие протоколы: RTP (Real-time Transport Protocol), и SCTP (Stream Control Transmission Protocol). Используйте RTP для обмена аудио/видео шифрованным по протоколу SRTP и SCTP для обмена DataChannel-сообщениями, шифрованными с помощью DTLS.

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

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

WebRTC это набор протоколов

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

Рис.1. WebRTC Agent DiagramРис.1. WebRTC Agent Diagram

Кратко: как работает WebRTC (API)

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

new RTCPeerConnection

RTCPeerConnection - это основа для установления WebRTC-сессии. Объект RTCPeerConnection реализует "под капотом" все протоколы, упомянутые выше. Здесь инициализируются все подсистемы, и пока что ничего больше не происходит.

addTrack

Метод addTrack создает новый RTP-поток. Для потока генерируется случайный Synchronization Source (SSRC). Созданный RTP поток будет затем описан в Session Description-сообщении внутри медиа-секции после вызова createOffer метода. Каждый вызов addTrack создает новый SSRC и добавляет медиа-секцию в SDP-сообщение.

Сразу после того, как SRTP сессия установлена, зашифрованные медиа-пакеты начнут отправляеться через ICE.

createDataChannel

createDataChannel создает новый SCTP-поток, если еще не был добавлен. По умолчанию SCTP выключен, но инициализируется как только одна из сторон потребует data channel.

Сразу после того, как DTLS сессия установлена, SCTP пакеты начнут отправляться через ICE.

createOffer

createOffer генерирует Session Description для отправки удаленному пиру.

Вызов createOffer ничего не меняет на локальном пире.

setLocalDescription

setLocalDescription фиксирует все, что менялось в созданном RTCPeerConnection для локального пира. Методы addTrack, createDataChannel и другие осуществляют временные изменения до тех пор, пока метод setLocalDescription не будет вызван. В этот метод нужно передавать строку session description сгенерированную методомcreateOffer.

После вызова setLocalDescription сгенерированное SDP-сообщение также отправляется на удаленный пир (выше обусждалось, что это можно делать любым способом), и далее на удаленном пире SDP-сообщение (offer) передается в метод setRemoteDescription. Удаленный пир в свою очередь отправляет свой локальный SDP в ответ (answer), который также нужно передать локально в setRemoteDescription.

addIceCandidate

addIceCandidate позволяет WebRTC-агенту добавить больше удаленных ICE-кандидатов.

ontrack

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

oniceconnectionstatechange

oniceconnectionstatechange - это также колбек, который отражает состояние ICE агента. Любые проблемы с сетью отражаются через этот колбек.

onstatechange

onstatechange - этот колбек служит для отслеживания окончания сбора всех ICE-кандидатов. Как только аргумент этого обратного вызова станет null, все ICE-кандидаты собраны.

В следующей части разберем Signaling и SDP.

Подробнее..

DataArt запустил бесплатную платформу Kiddo онлайн-задачник для школьников, изучающих Питон

15.10.2020 20:21:55 | Автор: admin


Пополнить базу собственными задачами может любой желающий, а на свой сайт встроить Kiddo не сложнее, чем плеер YouTube. Об идее детской образовательной площадки и ее реализации во время карантина рассказал Денис Цыплаков Solution-архитектор DataArt, вдохновитель проекта.

Что такое Kiddo?


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


Задача пользователя довести енота до финиша, отмеченного флагом, собрать печенье и не попасться монстру

Kiddo не претендует на роль учебника, и начальные представления о программировании здесь все-таки нужны. Но как раз пособий для начинающих учить Питон с нуля в интернете и так хватает: навскидку можно назвать канал Python Books или сайт pythonworld.ru. Наша платформа может служить скорее дополнением к ним, сборником практических заданий. Впрочем, мне кажется, что любой ученик средней школы за пару дней, а скорее всего, заметно быстрее разберется, как решать задачки. Тем более, у нас достаточно подсказок.

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


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

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


Для варианта с консолью на сайте Kiddo сейчас представлены 24 задачи

Чтобы встроить Kiddo к себе на сайт, нужно просто скопировать код вставки как у плеера YouTube.

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

Чем отличается Kiddo?


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

  1. Собственно, учебник изложение теоретического материала, соответствующее выбранной методологии обучения. Грубо говоря, что, как и в какой последовательности мы рассказываем.
  2. Практические задания некий механизм, который позволяет тебе что-то сделать руками, допустим, пощупать определенную технологию. В крайнем случае эту часть может заменять видеоплеер, но на современных онлайн-платформах обычно она представлена в виде интерактивного элемента.
  3. LMS Learning Management System система управления курсом, которая отслеживает ваш прогресс, приписывает к группе, проводит тесты и экзамены, раздает ачивки, а заодно уточняет, кто вы и откуда пришли.


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

Есть и другая проблема пробел между совсем детскими программами, где, допустим, нужно просто перемещать кубики по экрану, и IDE, где ты, работаешь вполне по-взрослому. Хотя отчасти промежуточную нишу заполняют игры про программирование, доступные в том же Steam, например TIS-100. Они обычно напоминают те, на каких я сам учился лет 30 назад на бытовых компьютерах. Главное в них быстрый фидбек-цикл: ты пишешь нормальную программу на более-менее взрослом языке программирования и получаешь мгновенную визуализацию: что-то или кто-то крутится, бегает, прыгает и т. д. Однако и такие игры можно использовать только как цельный, самостоятельный продукт вычленить задачи, чтобы встроить в собственный образовательный цикл, невозможно.

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

Как мы делали Kiddo?


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

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

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

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

Что дальше?


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



Наконец, если кто-то захочет добавить к Kiddo что-то свое, допустим, чтобы в качестве элемента он более органично выглядел на конкретном сайте, можно просто написать нам на kiddo@dataart.com. Думаю, мы что-нибудь придумаем. Ну или можно форкнуть код на GitHub и сделать все самостоятельно.
Подробнее..

Роботы-игрушки. Топ-10 проектов c Kikstarter для развития ребенка и обучения программированию

06.05.2021 16:19:55 | Автор: admin

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

Clicbot обучающий робот-игрушка

Clicbot универсальный программируемый робот-игрушкаhttps://youtu.be/sJaa1-Vnz4EClicbot универсальный программируемый робот-игрушкаhttps://youtu.be/sJaa1-Vnz4E

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

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

Головной блок управления включает акселерометр, гироскоп, датчик расстояния, микрофон, динамик, модуль Wi-Fi. Видеокамера позволяет распознавать лица и образы, команды управления, поддерживает технологию FPV (First-Person View) для телеприсутствия и удаленного наблюдения. Для программирования Clicbot можно использовать графический редактор Google Blockly или язык Python

На платформе Кикстартер ClicBot собрал $903 248 от 1678 спонсоров.
keyirobot.com

Bittle программируемый роботизированный кот

Bittle это игрушечный аналог роботов от Boston Dynamic. Он чем-то напоминает и другого робота-собаку Sony Aibo. Но при этом Bittle продается по цене роботизированной игрушки в виде конструктора для самостоятельной сборки.

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

Bittle создан на основе доработанной платы Arduino, для сложных движений использует различные датчики и внешние устройства. Плата управления включает процессор Atmega328P/16 МГц, 2 КБ памяти SRAM и 32 КБ флэш-памяти. Кроме того есть инерциальный измерительный модуль, блок ШИМ для 12 сервоприводов, инфракрасный приемник и зуммер. Есть 4 разъема для модулей расширения.

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

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

На развитие проекта Bittle на Индигого было собрано $709 391 от 2505 спонсоров.
petoi.com

MOSS универсальный инструмент для обучения программированию

Комплекты MOSS от компании Modular Robotics это оригинальный конструктор для создания роботов. Разнообразные по назначению, программируемые кубики (Cubelets) легко комбинируются и позволяют собирать сотни разнообразных роботов.

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

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

При первоначальной цели на Кикстартер в $100 000 для финансирования проекта удалось собрать $361 293.

modrobotics.com

Makeblock Neuron платформа электронных строительных блоков

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

Для соединения блоков между собой предусмотрены подпружиненные разъемы с магнитами. Помогает при этом интуитивно понятная система программирования. Каждый блок уже имеет предварительно запрограммированную функцию. Программировать новые функции можно в приложении Neuron или в редакторе mBlock 5. Для беспроводной передачи сигналов управления используются технологии Bluetooth и Wi-Fi.

Проект Neuron от китайской компании Makeblock получил на Кикстартер одобрение 1464 спонсоров, вложивших в развитие этой идеи $367 129.

makeblock.com

Thimble: новая электронная игрушка каждый месяц

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

Среди наборов Thimble представлены комплекты для сборки игровых контроллеров, музыкальных синтезаторов, устройств для Умного дома. Можно заняться сборкой более сложных программируемых роботов на микроконтроллере Arduino с управлением через Wi-Fi.

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

Для развития проекта Thimble через Кикстартер собрано $295 760 от 1776 заинтересованных заказчиков.

thimble.io

MarsCat домашний робот-кот

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

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

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

Реализовать проект MarsCat в жизнь помогли 227 спонсоров, вложивших в эту идею через Кикстартер $213 198.

elephantrobotics.com

Робот-автомобиль Zumi

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

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

Прототип Zumi был удостоен награды Лучшая инновация в категории Роботы и дроны на выставке CES 2019

Реализовать проект Zumi в жизнь помогли 888 спонсоров, вложивших в эту идею через $150 091

shop.robolink.com

ROYBI портативный робот-компаньон с ИИ

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

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

ROYBI был включен в США по версии CNBC в список 100 наиболее перспективных стартапов в 2019 году.

Запущенный на платформе Индигого проект ROYBI привлек $120 538

roybirobot.com

Заботливый Kiki

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

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

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

Самообучающийся робот Kiki собрал на платформе Кикстартер $105 611.

kiki.ai

Smartipresence простой робот телеприсутствия

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

Запущенное на смартфоне приложение поддерживает режим ИИ и позволяет распознавать образы с помощью облачного сервиса. По команде пользователя Smartipresence в сеансе видеосвязи будет сопровождать человека или даже домашнее животное, чтобы его лучше видел удаленный собеседник. Режим действий Smartipresence задается через приложение на смартфоне. Smartipresence можно визуально программировать в среде Scratch, либо с помощью Espruino на основе языка JavaScript.

Этот проект английского инженера Росса Аткина уже поддержали на Кикстартер 186 спонсоров, собравших для запуска проекта $17329.

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

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

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru