Разблокирование кодовых пространств GitHub для проведения семинаров

Разблокирование кодовых пространств GitHub для проведения семинаров

Содержание
  1. Мастерская
  2. Настройка Codespaces для семинара
  3. Предварительные сборки Codespaces
  4. Pain Пункты
  5. Что дальше?

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

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

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

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

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

Давайте начнем!

Мастерская

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

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

На семинаре слушатели узнали следующее:

Как создать новый смарт-контракт с помощью инструмента cargo contract CLI Как протестировать контракт из командной строки Как собрать контракт в двоичный файл WASM Как запустить узел Substrate локально Как развернуть контракт на локальном узле Как взаимодействовать с контрактом из командной строки

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

Именно здесь на помощь пришел Codespaces.

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

Настройка Codespaces для семинара

Первым делом я сделал форк копии шаблона Substrate Contracts Node Template. Шаблон Substrate Contracts Node - это отличная отправная точка для создания блокчейна на основе субстрата, поддерживающего смарт-контракты. Он поставляется с большим количеством уже готового кода, так что вы можете сосредоточиться на создании своих смарт-контрактов. Я переделал его, потому что мне нужно было добавить конфигурацию Codespaces, которая находится в директории .devcontainer.

Внутри папки .devContainer я добавил два файла:

devContainer.json - Этот файл содержит конфигурацию для среды Codespaces. Он указывает Codespaces, что устанавливать и как настраивать среду.

updateContentCommand.sh - Этот файл содержит команды для обновления содержимого среды Codespaces. Он запускается после создания среды Codespaces и является отличным местом для размещения любых команд, которые необходимо выполнить после создания среды.

Файл devContainer.json выполняет две задачи, необходимые для создания среды Codespaces, подходящей для воркшопа Substrate. Он устанавливает Rust на образ Codespaces и поддержку WASM для Rust. После этого запускается файл updateContentCommand.sh, который представляет собой exe-файлвырезаемый элемент, который завершает настройку мастерской.

В файле updateContentCommand.sh я добавил следующие команды:

#!/bin/sh

echo "Installing Rust and WASM toolchain..."
curl https://sh.rustup.rs -sSf | sh -s -- -y
rustup default stable
rustup update
rustup update
rustup update nightly
rustup target add wasm32-unknown-unknown
rustup target add wasm32-unknown-unknown --toolchain nightly

echo "Installing protoc...."
sudo apt update
sudo apt install -y unzip
PROTOC_VERSION=$(curl -s "https://api.github.com/repos/protocolbuffers/protobuf/releases/latest" | grep -Po '"tag_name": "v\K[0-9.]+")
curl -Lo protoc.zip "https://github.com/protocolbuffers/protobuf/releases/latest/download/protoc-${PROTOC_VERSION}-linux-x86_64.zip"
sudo unzip -q protoc.zip bin/protoc -d /usr/local
sudo chmod a+x /usr/local/bin/protoc
rm -rf protoc.zip

echo "Building Substrate Node Template..."
cargo build --release --locked

echo "Installing cargo-contract CLI tool..."
cargo install --force --locked cargo-contract --version 2.0.0-rc

Давайте разберем приведенные выше команды по порядку.

Первым делом мы используем инструмент rustup, чтобы установить стабильную версию Rust в качестве версии по умолчанию. Затем мы обновляем стабильную и ночную версии Rust и добавляем в обе версии цель wasm32-unknown-unknown. Это необходимо для сборки двоичных файлов WASM, что нам и нужно для создания наших смарт-контрактов. (Бонусный контент: Что означает неизвестная-неизвестная часть этой цели? По сути, это означает, что она компилируется практически на любой машине и запускается практически на любой машине. Очень круто, правда? Еще один способ, с помощью которого WASM может быть потрясающим).

Затем мы устанавливаем protoc, который является компилятором protobuf. Protobuf - это формат двоичной сериализации, который используется Substrate для связи между узлами. Нам нужно установить его, чтобы создать шаблон узла Substrate. Это требует немного больше работы, как вы можете видеть в примере выше. Сначала нам нужно получить последнюю версию protoc с GitHub, а затем разархивировать ее и переместить в директорию /usr/local/bin. Это необходимо потому, что Codespaces не поставляется с установленным по умолчанию protoc.

Наконец, мы собираем и устанавливаем шаблон Substrate Contracts Node и CLI-инструмент cargo-contract.

Как только все это будет сделано, среда Codespaces будет готова к семинару!

Есть только пара моментов, которые необходимо решить, прежде чем использовать это для семинара, и оба они связаны с тем, что вся эта настройка занимает много времени! На стандартном изображении Codespaces это может занять около часа. Это не идеально для семинара, где нужно как можно быстрее запустить людей. Вторая проблема заключается в том, что, хотя это и занимает время, для настройки также требуется некоторое знакомство с GitHub. Что делать, если участники семинара не знакомы с GitHub? Как заставить их быстро приступить к работе?

Вот как я решил эти проблемы.

Предварительные сборки Codespaces

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

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

Опция предварительной сборки в GitHub
Опция предварительной сборки в GitHub

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

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

Шаги продолжались в Google Doc до тех пор, пока они не дошли до конца, и им оставалось только нажать на последнюю кнопку.

Опция предварительной сборки в GitHub
Опция предварительной сборки в GitHub

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

Во время семинара все же возникли некоторые проблемы. Давайте рассмотрим их сейчас.

Pain Пункты

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

В настоящее время Codespaces для бесплатных пользователей ограничен 60 часами бесплатного использования и 15 ГБ бесплатного хранилища в месяц. Проекты Rust могут быть ресурсоемкими при компиляции, а Substrate не особенно мал, что означает, что пользователи Codespaces на бесплатном уровне сравнительно быстро исчерпают и время, и хранилище. Конечно, пользователь может приобрести больше и того, и другого на GitHub, а в аккаунты GitHub Pro включено больше времени и хранилища, но это все равно болезненная точка.

Цены на Codespaces по состоянию на май 2023 года
Цены на Codespaces по состоянию на май 2023 года

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

Что дальше?

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

Используете ли вы Codespaces для воркшопов? Я бы с удовольствием послушал о вашем опыте! Не стесняйтесь связаться со мной, чтобы поделиться своим опытом, или если у вас есть вопросы по этому посту. Меня можно найти по адресу hummusonrails.com.

Вам была полезна эта статья? Рассмотрите возможность спонсирования моей работы на GitHub, чтобы помочь мне создавать больше подобного контента! ❤️

Спонсор
Спонсор