Алекс Биль: Открытая разработка инструмента для создания серверных заглушек на языке Haskell

Scarf Sessions — это новый поток, в котором мы проводим беседы с людьми, формирующими ландшафт в области открытого исходного кода и устойчивости открытого исходного кода. В этой заметке будет дан обзор беседы, которую я провел с нашим гостем Алексом Билем (Alex Biehl).

Алекс — инженер-программист в Scarf, который недавно выложил в открытый доступ инструмент для создания серверных заглушек Haskell под названием Tie.

Полный текст интервью смотрите в видеозаписи, размещенной на нашем канале YouTube.

Краткий обзор стрима

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

Алекс: «Мы используем разные языки. Хотя есть два, которые выделяются для основных продуктов, это Haskell для бэкенда, например, метрики обработки данных, конвейер и все такое. А другой, конечно же, JavaScript для front-end, как пользовательский интерфейс продукта».

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

Можете ли вы описать разницу между Haskell и другими языками программирования?

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

«Исходя из этого, наш основатель, Ави, решил, что это будет хорошей основой для продукта».

Работали ли вы в open source до того, как присоединиться к Scarf?

Алекс: «Я всегда был активным разработчиком открытого кода. Большую часть времени в экосистеме Haskell. Я также участвовал во многих инфраструктурах Haskell.

«Я был сопровождающим Haddock. Это де-факто стандартный инструментарий документации для Haskell. Я также участвовал в создании основной системы сборки под названием Cabal и внес несколько небольших исправлений в сам GHC, а также во всю экосистему вокруг него».

Кристина: «Мне всегда интересно, как люди начинают работать с открытым исходным кодом.

«Было ли это так, что вы просто использовали эти вещи и решили внести свой вклад в проект?

«Или вы специально сказали: «Эй, я хочу сделать что-то с открытым исходным кодом».

«Как вы начали?»

Алекс: «Я думаю, что в этом отношении я прагматик. Я заметил, что что-то не работает, и теперь у вас есть возможность либо создать это самостоятельно, либо использовать то, что уже есть, и улучшить это».

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

Откуда пришла идея создания галстука?

Редизайн Scarf

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

«У нас был шанс переделать API, мы посмотрели на то, что у нас есть, и проанализировали все недостатки и минусы, которые мы увидели. И мы обнаружили, что определение API на языке Haskell само по себе подвержено обычным привычкам разработчиков».

«То, чем занимаются разработчики, — это создание шаблонов и механизмов для набора строк кода. Они сокращают дублирование и создают вещи. Они объединяют вещи, чтобы сделать их короче, чтобы сделать их более правильными, чтобы избежать повторений».

«Так получается, что сам API становится все менее и менее явным, потому что он скрыт за всеми этими структурами, которые мы создаем для того, чтобы легко написать сам API».

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

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

Разработка галстука

«Это привело меня к двум осознаниям. Во-первых, нам нужен явный человекочитаемый контракт API, которым мы можем поделиться с нашими клиентами».
Во-вторых, я хотел урегулировать его на когенерации. Это означает, что я не хочу сам набирать эти очень скучные типы интерфейсов или типы контрактов. Я действительно хочу иметь инструмент, который будет генерировать их для меня, чтобы я никогда случайно не внес изменения в код Haskell, которые нарушат контракт. С учетом этих целей наиболее распространенным выбором для таких вещей сегодня является Open API. Open API обозначает специфический язык для моделирования веб-интерфейсов.

«Здесь в игру вступает Tie, который понимает Open API. Tie берет формат Open API и генерирует из него код на языке Haskell. Он делает это таким образом, что нам нужно реализовать только фактический список для конкретных маршрутов и не нужно иметь дело со всеми этими логиками и особенностями сериализации».

Что сложного или неожиданного вы нашли в открытом сорсинге Tie?

Алекс: «Одна из вещей, которую я не смог сделать вначале — это написать хорошую документацию.

Я даже не создал хорошего примера в репозитории, когда впервые открыл проект. У него не было раздела «Как использовать», хотя мы уже сами использовали его в производстве.

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

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

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

Алекс: «Не позволяйте совершенству быть врагом добра».

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

Что ждет Tie в будущем?

Алекс: «Tie еще не закончен. Он не поддерживает все настройки Open API. Стандарт огромен, так что призыв к участию находится прямо здесь.

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

Над чем еще вы работаете?

Алекс: Меня больше всего беспокоит правильная генерация контрактов для внешних систем, например, баз данных. Люди любят использовать ORM и генераторы».

Кристина: «Вы можете объяснить, что такое ORM?».

Алекс: «Метод объектно-реляционных отображений. Например, активная запись в Ruby, Django и т.д. И я хочу инструмент, который берет вашу папку миграции и генерирует для вас типы, очень похожие на то, что делает Tie. Я хочу, чтобы инструмент генерировал типы, которые отражают записи, структуру таблиц в базе данных, а затем также позволял вам в основном вводить SQL.

И генерировать небольшие записи вокруг этого SQL, которые являются типизированными. Таким образом, вы можете использовать SQL для написания теорий, определения таблиц, изменения таблиц и так далее, но при этом старая добрая система типов поможет вам не перепутать типы».

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

Вы помогаете формировать ландшафт в области открытого исходного кода? Хотите присоединиться к нам на потоке Scarf Sessions? Напишите Кристине по адресу christina@scarf.sh.

Вы помогаете формировать ландшафт в области открытого исходного кода? Хотите присоединиться к нам на стриме Scarf Sessions? Напишите Кристине по адресу christina@scarf.sh.

Чтобы узнать больше о Scarf:
Веб-сайт

Следить за Алексом:
Twitter
GitHub

Следить за Кристиной:
Twitter

Оцените статью
devanswers.ru
Добавить комментарий