>
>
>
Текстовая трансляция CppCast 293: One L…

CppCast
Статей: 9

Текстовая трансляция CppCast 293: One Lone Coder

Сегодня Роб Ирвинг и Джейсон Тернер общаются с Дэвидом Барром. Сначала они обсудят калькулятор Microsoft с открытым исходным кодом и обновление CMake. Затем они поговорят о YouTube канале Дэвида – "One Lone Coder" и о том, что вдохновило его снимать видео. Также речь зайдет о PixelGameEngine – игровом движке для 2D-игр, над которым работает Дэвид и сообщество One Lone Coder.

Спонсор данного эпизода – C++ Builder, полнофункциональная среда разработки C++ приложений для Windows, позволяющая создавать приложения в 5 раз быстрее с меньшим количеством кода. Инструмент обеспечивает поддержку на протяжении всего жизненного цикла разработки для создания единой базы исходного кода. Основное преимущество C++ Builder – это его фреймворки, многофункциональные библиотеки, открывающие большие возможности, чем другие C++ инструменты. Доступно использование удостоенного награды фреймворка VCL для высокопроизводительных приложений Windows и мощный фреймворк FireMonkey для кросс-платформенных iOS. Попробуйте последнюю версию на embarcadero.com.

Гость

Дэвид Барр – профессиональный программист и разработчик аппаратного обеспечения. Уже 16 лет работает в различных областях, связанных с робототехникой и нейроморфной инженерией. В свободное время снимает видео для YouTube канала One Lone Coder и поддерживает свое сообщество разработчиков. У Дэвида есть опыт программирования в различных областях, начиная от компьютерных игр, нейробиологии, обработки изображений и заканчивая моделированием физической среды, семантическими вычислениями и робототехникой. Также Дэвид снимает видео об основных алгоритмах и о том, что они являются основой для решения многих проблем. YouTube канал Дэвида в основном о С++. На него подписаны 250 тысяч человек. Его заголовочный файл olc::PixelGameEngine и захватывающие видео, в которых информация изложена доступным языком, помогают узнать новое о программировании на C++ и создавать собственные потрясающие игры и продукты.

Как обычно, мы начнем с новостей.

Калькулятор Microsoft с открытым исходным кодом

Роб: Microsoft calc.exe теперь содержит открытый исходный код. На странице GitHub выложили открытый исходный код калькулятора Windows. Я взглянул на код. Похоже, они действительно используют современный C++. Если вас интересует использование XAML и C++ в приложениях, там есть примеры того, как это сделать.

Дэвид Барр: Я посмотрел код и мне стало смешно. Это же калькулятор! Неужели для создания калькулятора нужно 50 отдельных C++ файлов и более 80 общих файлов? Судя по исходным файлам, сейчас у C++ и графических пользовательских интерфейсов есть большая проблема. У них все сложно. А некоторые думают, что Microsoft будет занимать ведущую роль в этой области... Я посмотрел на код и ужаснулся. Слишком много надо, чтобы быть простым калькулятором. :)

Джейсон: Думаю, стоит отметить, что этой статье уже два года, но если посмотреть в GitHub историю развития калькулятора, можно увидеть, как он развивался. Похоже на программу 35-40-летней давности или что-то в этом роде. Часто люди спрашивают меня, как улучшить свои знания о C++. Я всегда советую им начать с проекта, который нравится. Даже если что-то кажется чрезвычайно простым как графический калькулятор, возможно, придется работать над усовершенствованием этого в течение следующих 35 лет.

Вышел CMake 3.20.0

Джейсон: Честно говоря, не вижу ничего интересного в CMake 3.20.0. Есть много мелочей, которые кто-то точно оценит. Например, с помощью target_include_headers, вы можете разместить заголовок в определенном порядке. Это настраиваемый параметр. Куча небольших изменений, но ничего такого, что лично меня заинтересовало бы.

Дэвид Барр: Если честно, я на самом деле не особо пользуюсь CMake. Я использовал его где-то в 2006 году. Он мне нравился. Тогда это был удобный инструмент для меня. В то время я использовал его для создания эмулятора компилятора. Мне нужно было, чтобы он работал на Linux и Windows. Но потом я разлюбил CMake, потому что он становился все более и более сложным. По крайней мере, мне так казалось.

Джейсон: Очень похоже на ситуацию с C++, да? За последние девять лет многое добавили в язык. Сейчас в C++20 многое можно сделать гораздо проще и понятнее, чем было в 2006 году. То же самое с CMake. Нужно пойти и поискать современные примеры использования CMake. В противном случае вы просто будете делать все неправильно.

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

Джейсон: Да. Полностью согласен.

Почему C++?

Роб: Итак, Дэвид, расскажешь нам поподробнее о том, почему ты начал работать с C++, и чем ты занимаешься сейчас?

Дэвид Барр: Меня заинтересовал С++, потому что Java показался мне довольно скучным. Я начинал аж с Turbo C. Помню, как откладывал карманные деньги. Я был еще подростком и у меня была Visual Studio 6 на компакт-диске. К этому прилагались C++ компилятор и книга. В книге были материалы MFC, Microsoft Foundation Classes. Я изо всех сил старался понять, как заставить все это работать. Но ничего не получалось. Тогда я вообще не представлял, что такое разработка программного обеспечения и как этим заниматься. Понятия не имел, что такое классы и объектно-ориентированное программирование. Я работал с языками Pascal, BASIC и Assembly. А потом в университете я узнал, что такое настоящая разработка программного обеспечения. Мы изучали Java.

Я думал, что Java – это предел мечтаний, пока мне не понадобилось улучшить производительность. Мне захотелось заняться программированием игр, а Java совсем не подходил для этого. Сейчас в Java не все так плохо, но раньше было не так. Мы говорим о 2001-2002 годах. Затем, я вернулся к своей книге по C++ и понял, что такое члены класса, наследование, полиморфизм. Всему этому меня научили в университете. Я открыл это для себя с совершенно другой стороны. MFC по-прежнему был ужасен, но я уже мог создавать то, что хотел. С тех пор я больше не бросал С++. В C++ возможно абсолютно все.

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

Роботы, роботы повсюду...

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

Джейсон: Не ваши ли роботы исследовали Фукусиму после цунами?

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

Джейсон: Интересно, а ваше оборудование как-то защищено для предотвращения ошибок памяти, которые могут появиться из-за радиации?

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

Джейсон: Интересно. Такое на шоу мы еще не обсуждали.

Нейроморфная инженерия

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

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

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

Джейсон: Для этого вы использовали ППВМ?

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

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

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

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

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

YouTube канал OneLoneCoder

Джейсон: У вас 250 тысяч подписчиков на YouTube. Это очень много! Какое-то конкретное видео спровоцировало рост вашего канала или количество подписчиков постепенно росло со временем?

Дэвид Барр: Вообще я не очень люблю соцсети, не особо интересуюсь социальными сетями. Раньше меня не было ни в каких соц. сетях, да и YouTube я не воспринимаю как соц. сеть, но вот что из этого получилось. И я рад, что так вышло. Я рад, что людям это нравится.

Я завел канал примерно четыре года назад. Аудитория резко возросла после выхода серии роликов о том, как начать работать с 3D-графикой с нуля. Эти видео заинтересовали многих. Я продолжал выпускать интересные, забавные и смешные видео, которые прекрасно заходили аудитории.

Роб: Как появилось желание завести канал на YouTube?

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

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

А остальные ролики на YouTube – сплошной "мусор". И на этом все, всего две категории. Нет чего-то среднего. Звучит жестко, но так и есть. В YouTube можно найти тысячи ужасных видеороликов по программированию. И во всех роликах одно и то же. Они все начинаются так: сначала мы включим стандартный ввод-вывод, затем напишем "Hello, world", а потом создадим что-то, что продемонстрирует последовательность Фибоначчи. Кого вообще волнует последовательность Фибоначчи?

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

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

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

Роб: Какие ваши проекты на YouTube канале подходят для начинающего программиста?

Дэвид Барр: Мое первое видео – шутер от первого лица, написанный в командной строке Windows. Я хочу, чтобы люди сразу пробовали писать. Не хочу, чтобы им приходилось загружать библиотеки, инструменты и прочее. Допустим, у вас есть Windows (простите те, кто использует Linux, я перешел на него позже...) и Visual Studio, что же можно с этим сделать? У всех есть командная строка Windows. Немного кодинга и можно превратить эту командную строку в графический интерфейс. Думаю, людей зацепило именно это.

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

У меня также было видео о том, как создать Тетрис в командной строке. Опять же, очень простая программа. Но использование командной строки в качестве пользовательского интерфейса позволяет быстро и просто начать писать код. Может это и выглядит немного глупо, но это намного лучше, чем "Hello, world" и эта бестолковая последовательность Фибоначчи. Ненавижу эту последовательность.

Джейсон: Есть ли какая-нибудь математическая последовательность, которую вы хотели бы продемонстрировать?

Дэвид Барр: Я не буду отвечать на этот вопрос. :D

olc::PixelGameEngine

Роб: Мы упоминали в вашей биографии заголовочный файл olc::PixelGameEngine. Это игровой движок, написанный при помощи командной строки?

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

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

PixelGameEngine – это инструмент, представляющий собой единый заголовочный файл. Он работает на Linux, Mac и Windows. Он использовался в Nintendo Switch и на PlayStation Portable. Мы также запускали его на Raspberry Pi и ChromeOS. В PixelGameEngine очень простой пользовательский интерфейс, потому что новичку много не надо, ему просто хочется запустить приложение на C++, нарисовать пару линий, кругов и изображений, не беспокоясь о буферах памяти, выделениях или всплывающих окнах.

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

Джейсон: Сколько строк кода в PixelGameEngine?

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

Роб: По-моему, вы говорили, что среди участников сообщества есть дети. У меня двое детей, двенадцать и девять лет. Им нравится Майнкрафт, поэтому они иногда смотрят видео на YouTube о Майнкрафте. Я думаю, им как раз зашел бы такого плана контент. Интересно, сколько детей состоит в сообществе разработчиков PixelGameEngine?

Дэвид Барр: Сейчас на мой YouTube канал заходят люди в возрасте от 25 до 35 лет. Аудитория оказалась немного старше, чем я ожидал. Однако в Discord аудитория немного моложе, больше всего подписчиков от 15 до 25 лет.

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

Конечно, PixelGameEngine помог им в этом. Я знаю, что он используется во многих школах и университетах в качестве средства обучения. Всякий раз, когда подходит дедлайн, я получаю сотни сообщений со словами: "Как мне сделать это в PixelGameEngine?" :)

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

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

Моя миссия состоит в том, чтобы снизить сложность изучения C++ на начальном этапе, потому что я думаю, что C++ прекрасный язык. Мне также нравится тот факт, что сейчас Visual Studio – это инструмент. И это очень хороший инструмент. Он по-прежнему занимает многовато места, но в нем много полезных функций для начинающих.

Роб: Как часто у вас выходят видео?

Дэвид Барр: Сейчас я выкладываю видео каждые две недели. В первый год видео выходили раз в неделю. Но я чуть не умер тогда. На создание видео уходит около 30 часов. Обычно на создание кода уходит около 20 часов, 10 часов – на съемку и редактирование получившегося материала. Потом я решил, что нужно немного притормозить. В этом году я выкладываю видео каждые две-три недели, и я снова начал вести прямые трансляции на Twitch. Там все немного по-другому.

Роб: Можно ли где-то посмотреть игры, созданные с помощью PixelGameEngine?

Дэвид Барр: Этим мы сейчас и занимаемся. Мы создаем демонстрационную галерею. На данный момент можно посмотреть видео с демонстрацией игр. Они есть в сообществе на моем сайте. Я собрал лучшие. В нашем Discord есть форум под названием "Show Your Stuff", в котором обсуждают не только PixelGameEngine, но многие приложения на основе PixelGameEngine публикуются именно там. Я начал их собирать с целью выложить их все на сайт onelonecoder.com.

Большое спасибо, что уделили внимание данной беседе. Роб и Джейсон хотели бы узнать, что вы думаете о подкасте. Пожалуйста, расскажите, интересно ли вам то, что они обсуждают. Не стесняйтесь предлагать новые темы. Ведущие с удовольствием рассмотрят их для обсуждений. Отправляйте отзывы на feedback@cppcast.com, поставьте лайк и подписывайтесь на CppCast в Twitter. Вы также можете подписаться на аккаунты Роба и Джейсона в Twitter: @robwirving и @lefticus. Не забудьте оставить отзыв в iTunes или подписаться на YouTube.

Ведущие также хотели бы поблагодарить тех, кто поддерживают шоу через Patreon. Если вы хотите поддержать CppCast на Patreon, переходите по ссылке patreon.com/CppCast. Всю необходимую информацию можно найти в заметках к выпуску на сайте cppcast.com. Музыка для этого выпуска была предоставлена podcastthemes.com.

Ресурсы

Подкаст

Гость

Новости

Ссылки

Спонсоры