paint-brush
GitHub и искусство создания открытых сообществby@patrickheneise
188

GitHub и искусство создания открытых сообществ

Patrick Heneise11m2023/12/20
Read on Terminal Reader

В этой статье я делюсь своим опытом и идеями о том, как создавать открытые сообщества. Я работал над этой концепцией и инструментами, чтобы собрать все воедино для автоматизации сообщества, и надеюсь, что это поможет вам и вашему сообществу упростить задачу.
featured image - GitHub и искусство создания открытых сообществ
Patrick Heneise HackerNoon profile picture
0-item
1-item
2-item

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


Помню, более 10 лет назад я посетил свою первую небольшую технологическую конференцию — CouchConf в Берлине. К счастью, примерно в то же время проходила встреча BerlinJS Meetup, и я был потрясен сообществом и людьми. У них есть репозиторий GitHub, настроенный для веб-сайта, и доклады отправляются как проблемы GitHub. Я был поражен простотой и прозрачностью процесса, поэтому через несколько недель создал форк репозитория и основал BarcelonaJS. Это было начало моего собственного организаторского пути.


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


Это потрясающе, мне бы хотелось там побывать, но я не знал!


Эта фраза стала для меня мотивацией начать изучать GitHub как инструмент сообщества, потому что GitHub — одна из самых замечательных платформ для автоматизации, и это то, что вам нужно делать как организатору: автоматизировать все до чертиков, чтобы опубликовать мероприятие на Eventbrite, Meetup, Twitter, Facebook, группы Telegram, WhatsApp, электронная почта, календарь и т. д. и т. д. и т. д. и делайте это за 2 недели, за 1 неделю, за 3 дня, за 1 день до, за 1 час до мероприятия, чтобы никто не мог сказать потом. : «Я не знал об этом». Потому что, в конце концов, вы делаете это не для себя, а для общества.


Во время своих путешествий я встречал на Meetup сообщества Node.js и JavaScript с тысячами участников, но не было ни одного предстоящего или недавнего мероприятия. Это может произойти по многим причинам, но часто это происходит потому, что у организаторов нет времени или они перешли к другим вещам, и трудно найти преемника, который сможет продолжать работу. Meetup и другие платформы отлично подходят для открытия сообществ и мероприятий, но из-за них участникам сложно связаться с сообществом в случае, если организатор больше не активен, и захватить управление / возродить сообщество.


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

Преимущества использования GitHub для создания сообщества

Открытый исходный код и открытое сообщество

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


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


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

Общественность и прозрачность

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


Моей целью с такими сообществами, как BarcelonaJS, CDC и т. д., было/является создание свободных и открытых пространств для разработчиков, где они могли бы делиться и общаться. И «бесплатно» — это то, где важна прозрачность. Раньше я всегда держал руки подальше от финансовых пожертвований. Если бы компания хотела спонсировать, она могла бы заказать еду или напитки прямо на место проведения мероприятия, но я бы не помогал. Благодаря Open Collective это стало намного проще, и теперь мы можем принимать финансовые пожертвования и делать их прозрачными для сообщества. Они используются, например, для оплаты доменов, получения еды и напитков, проведения рекламных кампаний и т. д.


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

Недостатки и предостережения

GitHub не является платформой для сообщества/мероприятий, такой как Meetup, поэтому есть некоторые предостережения. Я привык относиться к проблемам как к «событиям» или «предложениям для обсуждения» и к формам задач GitHub для структурирования заявок. Но это не идеально, и новичкам требуется время, чтобы понять: «Создайте задачу, чтобы представить доклад». Нет никаких «функций комфорта», позволяющих выбрать дату, местоположение на карте и т. д. и отправить простое уведомление по электронной почте сотням людей.

Открытое сообщество разработчиков

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


  • БарселонаJS , 2012 - 2018 гг.
  • Хакеры и основатели Барселоны, 2012–2015 гг.
  • Группа встреч Node.js в Барселоне, 2012–2018 гг.
  • Встреча Couchbase в Барселоне, 2012–2015 гг.
  • NodeConf Барселона, 2015, 2016, 2017 гг.
  • МедитерранеаJS, 2015 г.
  • КипрJS 2018 - 2021
  • Сообщество разработчиков Кипра 2020 – настоящее время


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

Этикетки и структура

Первым шагом является настройка организации GitHub и создание двух репозиториев:

  1. события
  2. переговоры


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


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

Просмотр проекта GitHub


На Кипре мы добавили метки для разных регионов острова, но самое главное — необходима метка «Одобрено». Все новые задачи создаются с меткой «Мероприятие», но «одобрить» мероприятие может только тот, у кого есть разрешение на сортировку (команда организаторов). Это важно, чтобы избежать спама и убедиться, что мероприятие актуально.

Ярлыки событий GitHub


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

GitEvents

GitEvents / GitEvents на GitHub берет свое начало еще в 2014 году и началось с названия gitup как результат сотрудничества «хакерских выходных» между London Node User Group (LNUG) и Barccelona Node.js Group. В то время GitHub Actions еще не существовало, и мы пытались использовать Webhooks для решения проблем для создания структурированных данных для веб-сайтов, размещенных на GitHub, на основе данных Meetup.com. Установка была громоздкой, и проект на время был заброшен.


Сегодня GitEvents — это простой набор действий GitHub для автоматизации рабочих процессов по задачам. «Git Ops» для встреч и мероприятий. Все, что нужно, — это организация GitHub и приложение GitHub. Некоторые из особенностей:


  • Инклюзивная организация : любое взаимодействие с репозиториями GitHub, проблемами или обсуждениями запускает рабочий процесс, который приглашает пользователя в организацию GitHub и добавляет его в команду «Члены сообщества». Разрешения те же, что и для общественности, но небольшой «хак для роста и вовлечения» заключается в том, что вы можете @-упоминать всех участников сообщества в задачах. Это отлично подходит для объявлений, но не следует злоупотреблять, иначе вы быстро потеряете участников.
  • Шаблоны задач : я собрал набор простых шаблонов для событий, переговоров, ответов по правилам поведения и т. д., чтобы быстро начать работу с GitEvents.
  • Broadcast : рабочие процессы GitHub, которые можно повторно использовать для автоматизации маркетинга и общих задач, таких как отправка электронных писем, твитов, сообщений bluesky, создание и обновление мероприятий в Discord, EventBrite, Meetup и т. д.
  • ICS : это действие GitHub для создания файлов iCal для событий. iCal — это стандарт для событий календаря. Люди могут просто добавить это как подписку в свой календарь, чтобы быть в курсе событий сообщества. Мы создали перенаправление на файл github, чтобы люди могли подписаться на календарь по простой ссылке: https://calendar.cdc.cy .


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


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

Формы задач GitHub

Формы задач по-прежнему являются относительно малоизвестной функцией на GitHub. Вместо обычных шаблонов Markdown можно предоставить файл YAML с конфигурацией формы.

Форма выпуска GitHub


Получать структурированные входные данные довольно здорово, но после сохранения как «Проблема» данные становятся семантически бесполезными, потому что это просто Markdown. Я экспериментировал с вехами, заголовками Markdown, метками и т. д., чтобы добавить к задаче семантическую информацию, такую как даты, местоположения и т. д., но ничего не получалось. Итак, я начал создавать парсер тела форм задач GitHub . Это помогает проанализировать проблему, созданную через форму, для извлечения дат, ссылок, изображений, списков и т. д. и преобразования их в структурированные данные JSON. Его можно напрямую передать на другие платформы, такие как Discord, EventBrite, Meetup и т. д., или использовать в рассылках, твитах и т. д.


Анализатор тела форм задач также доступен на npm в виде библиотеки для анализа любого текста Markdown. Лишь недавно я понял, что целые файлы README.md можно анализировать для структурирования данных веб-сайта:


 query ($organization: String!, $repository: String!) { repository(owner: $organization, name: $repository) { id name object(expression: "main:README.md") { ... on Blob { text } } } }


Это запрос на получение содержимого файла из main ветки репозитория, и вы можете передать его в «анализатор тела»:

const structuredData = await bodyParser(readmeFile()?.repository.object.text)


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

ГрафQL API

С помощью последнего веб-сайта https://cdc.cy я хотел изучить и расширить границы возможного с помощью Issues, файлов README.md и структурированных данных JSON, и я очень доволен результатом:


  • большая часть содержимого веб-сайта извлекается из файлов README.md или .json на GitHub; каждый может редактировать, не требуется ни CMS, ни учетной записи и т. д.
  • предстоящие и прошлые события основаны на проблемах GitHub (утвержденные и помеченные событиями проблемы в репозитории events )
  • организаторы извлекаются из членов команды GitHub
  • События могут быть аннотированы/дополнены соответствующими данными о местоположении из файла «общих местоположений».
  • Профили докладчиков полностью основаны на профилях пользователей GitHub, мы можем получать аватары, биографию (файл сведений), местоположение и т. д. и создавать красивые страницы профилей докладчиков.
  • Мы можем отображать некоторую статистику, такую как «количество членов организации», «количество прошлых/предстоящих событий» и т. д.


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

Резюме и перспективы

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


  • Открытое сообщество : все публично и прозрачно, и мы приветствуем всех (при условии, что они соблюдают Кодекс поведения).
  • События и переговоры/предложения — это проблемы в репозитории.
  • Ярлыки помогают структурировать и автоматизировать


Создание всего этого заняло много времени и энергии, и еще много чего не хватает, на что у меня нет времени:

  • правильная интеграция электронной почты с расписаниями, напоминаниями и т. д.
  • завершить интеграцию EventBrite
  • добавить интеграцию с Meetup
  • добавить интеграцию WhatsApp/Telegram/Slack
  • улучшить обработку проблем и автоматические комментарии (например, напоминание о Кодексе поведения, последующее напоминание и т. д.)


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


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

Случайные мысли, советы и подсказки организаторов из личного опыта

  • Площадки: выбрать офис компании в качестве места проведения несложно, но имеет множество недостатков. Людьми легко манипулировать, если они есть в офисе (посмотрите, какое у нас классное место, у нас даже есть коктейль-бар!). Помните, что у компании другие мотивы, чем у вас (рекрутинг, маркетинг и т. д.). Иногда даже могут возникать конфликты, что людей не пускают в офис конкурентов. Если возможно, я предпочитаю «нейтральные» коворкинги и помещения для проведения мероприятий, и благодаря Open Collective вы можете получить спонсорство для оплаты места проведения с справедливыми правилами (найма/маркетинга/и т. д.) для всех.
  • Напоминания: мы все заняты и легко что-то забыть. Не все так заинтересованы, мотивированы и воодушевлены мероприятием, как вы, поэтому регулярные напоминания поддерживают вовлеченность людей и помогают выработать привычку. Найдите подходящую частоту напоминаний и не переусердствуйте и не рассылайте спам людям. Разные средства массовой информации работают для разных людей, поэтому я стараюсь охватить как можно больше.
  • Дефицит «Я заметил, что объявление о мероприятии всего за неделю до его проведения и наличие ограниченного количества мест работает лучше, чем выпуск за месяц вперед с вместимостью 100+» – Дмитрий Заец, BarcelonaJs
  • Бонусы: «Раздача подарков — это весело, а раздача билетов на конференции и другие мероприятия может быть приятным бонусом за их посещение», — Дмитрий Заец, BarcelonaJs.
  • Последовательность: «Создайте реалистичный график с самого начала. Будь то ежемесячная встреча или ежеквартальная конференция, последовательность является ключевым моментом. Создайте дорожную карту, распределите обязанности и придерживайтесь плана. Это не только поддерживает интерес вашей аудитории, но и помогает в построении надежное сообщество». – Федерико Рампаццо, CDC.cy
  • Поиск спикеров: «Не бойтесь обращаться к экспертам, которые, возможно, захотят поделиться своим мнением. У многих ваших участников наверняка есть интересные истории, которыми стоит поделиться! Это может стать ценным опытом как для них, так и для сообщества. Фото-, видео- и аудиозапись мероприятий очень ценны и помогают спикерам в их ораторской карьере, а также увеличивают охват мероприятия». – Федерико Рампаццо, CDC.cy