Прелюдия

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

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

Почему бы не сделать все самому?

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

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

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

Разблокирование запросов на вытягивание: elm-native-ui

Elm Native UI - это проект, предназначенный для работы с React Native через Elm. Ossi создал проект, чтобы исследовать мир создания Elm для мобильных приложений. Когда он был впервые создан, идея заключалась в использовании альтернативной формы Program вместо чистой версии JS или Html. Это будет использовать представления ReactNative вместо Html при обычном запуске Elm в потоке JS.

Существует ограничение на типы, которые были допустимой main функцией в Elm, и тип, используемый elm-native-ui, не будет работать с компилятором Elm. Осси говорил об этом с Эваном, и я встретился с Осси в Стокгольме на встрече. Он объяснил мне, что, по словам Эвана, необходимо изменить, и когда я вернулся домой, я отправил PR, чтобы разрешить использование elm-make нужным способом. Если что, весь PR состоял примерно из двух строк. elm-native-ui также использовал некоторый код ядра Elm для рендеринга компонентов ReactNative. Я также создал инструмент для локального опробования кода ядра.

По сей день я запускал приложение ReactNative, может быть, 4 или 5 раз. У меня есть общее представление о том, как это работает, но я никогда не использовал его широко. Однако Ossi сделал это, и важная часть elm-native-ui посвящена ReactNative.

Забрать

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

Предыдущий опыт: разведка массива вязов

Elm-array-exploration - это библиотека, альтернативная Robin для реализации ядра Elm Array. Какое-то время возникало множество проблем с реализацией Array в основном пакете Elm, над чем я уже давно размышлял. Робин ранее работал над реализацией всевозможных альтернативных структур данных в Elm.

Когда Робин реализовывал этот проект, мы много обсуждали на канале elm-dev в Slack. Из моих предыдущих экспериментов, направленных на исправление реализации массива, я решил, что идеальная структура должна иметь чистую реализацию Elm сложной структуры данных неизменяемого массива и использовать низкоуровневую оболочку вокруг реализации массива JS фиксированного размера. Это позволит сделать код быстрым и в то же время удобным в обслуживании. Чистая реализация Elm была бы слишком медленной и сложной, чистая реализация JS - это то, что у нас было изначально.

Этот совет, наряду с обзором кода, помог elm-array-exploration стать рекомендуемой реализацией массива для использования с Elm. Робин проделал всю тяжелую работу - все, что я делал на этом пути, - это разговаривал с ними и предоставлял некоторую полезную информацию, основанную на предыдущих экспериментах.

Забрать

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

Глубокие знания: элли

Ellie - это приложение наподобие js-bin, предназначенное для обмена фрагментами кода Elm с предварительным просмотром скомпилированной версии. Люк Уэстби создал его с коллегой, намереваясь помочь сообществу, поскольку нам нужен был способ поделиться фрагментами. С тех пор это стало самым популярным способом демонстрации демо в мире Elm.

Люк зашел на канал elm-dev и задал кучу вопросов. Пара из них рассказывала о том, как работает elm-package, поскольку они хотели загружать пакеты только один раз и делиться ими с каждым приложением ellie, чтобы сэкономить дисковое пространство и затраты на полосу пропускания. К счастью, у меня есть глубокие знания о том, как работает elm-package, из-за различных проблем с ним в прошлом. Я смог указать им на списки пакетов.

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

Забрать

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

Контекстно-зависимые запросы на вытягивание: elm-css

Elm-css - это способ написания CSS на чистом Elm. Он позволяет вам использовать функции Elm для создания CSS для ваших веб-приложений. Ричард Фельдман придумал и реализовал ее вариант для молниеносной беседы. Из прототипа идея превратилась во что-то, что используется в производстве несколькими веб-приложениями Elm.

Когда я встретил Ричарда на ReactiveConf в том году, и они рассказали мне об этом, первоначальная демонстрация была просто текстовым выводом CSS. Ему удалось создать Elm-CSS с помощью API, но он просто производил строку. В то время я много играл с виртуальным домом Элма и знал, что реализовать его будет тривиально. Я фактически создал этот тег style : String -> Attribute, который вы можете увидеть здесь. Эта небольшая помощь помогла превратить живую демонстрацию в нечто, что люди действительно могли видеть визуально.

Забрать

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

Обзоры кода: elm-benchmark

Elm-benchmark - это библиотека от Брайана Хикса для тестирования кода Elm. Кто бы мог подумать? Некоторое время де-факто не существовало способа тестирования отдельных функций в Elm, и elm-benchmark пытается решить эту проблему. Прежде чем Брайан был готов к публикации, он пришел на канал elm-dev, чтобы попросить рецензию кода. Я просмотрел код и дал несколько рекомендаций. Ничего особенного, в основном просто проверка возможных причин ошибок времени выполнения в коде ядра, который он должен был использовать.

Забрать

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

Заключение

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

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

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