Сверхбыстрое развитие

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

Моя последняя попытка — построить поверх того, что я описал в статье Нулевая классификация вашего списка чтения на Medium. Решение помогает навести порядок в списках для чтения на Medium с помощью парсинга веб-страниц и небольшого количества машинного обучения. Хотя это вызвало определенный интерес у подписчиков, часть моей аудитории не знакома с python или самим программированием. Однако я не хочу исключать их из группы, поэтому решил создать для них инструмент. Вот мой план:

  1. Купите домен для личного веб-сайта, где я буду размещать все небольшие продукты, которые я создаю для себя и просто для удовольствия;
  2. Создайте клиентское приложение на основе React для обработки основных вариантов использования;
  3. Создайте бэкэнд-приложение на основе Flask для улучшения внешнего интерфейса;
  4. Попробуйте реализовать асинхронное общение, так как это снизит стоимость хостинга для POC;
  5. Интенсивное использование фреймворков и докеров, так как это позволяет не изобретать велосипед;

И вот результат: promedium.destilabs.com

Общая архитектура

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

По этой причине мне нравится поддерживать связь внутри приложения с помощью инструментов на основе очередей, таких как Rabbit MQ. Мой бизнес-кейс определяется как «Разбирать список чтения клиентов, классифицировать его и возвращать ярлыки». Скорее всего, ни у кого не будет требования получить ответ немедленно, поэтому я мог немного отложить это и сэкономить немного денег на 100% онлайн-решении.

Внешний интерфейс

Помните, моя цель — повторно использовать как можно больше готовых компонентов. К счастью, современный интерфейс наполнен ими. Задача состоит в том, чтобы выбрать правильный. Поскольку у меня нет особых требований к UX, мой технический стек был довольно простым: React 18 с материальным интерфейсом и некоторой готовой формой от FormSpree. Вот взгляд с высоты птичьего полета на то, что я сделал:

  1. Создайте стандартное реагирующее приложение с помощью create-react-app:
npx create-react-app my-app
cd my-app
npm start

Подробнее: Создание нового приложения React

2. Создайте форму на FormSpree и интегрируйте ее в свой код

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

3. Создайте несколько инструкций по использованию SaaS

Клиентам часто сложно использовать ранние прототипы, потому что создатели готовы идти на компромисс между скоростью и готовностью решения. Однако это не означает, что вы не обязаны делать UX максимально простым. Я записал небольшое демонстрационное видео для руководства и преобразовал его в GIF-анимацию. Я также оставил простой старый текст, чтобы дать больше ясности относительно того, что этот инструмент будет делать. Вот как выглядит окончательный интерфейс:

ОЦЕНКА: если у вас установлен NodeJS и вы хотя бы вкратце знакомы с основами React, на прохождение этого раздела у вас уйдет максимум 4 часа.

Бэкенд

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

Вот хорошее место для начала: docker-rabbitmq-example. Этот репозиторий дает вам базовый пример, который будет передавать что-то вроде {"message": 0} на обмен Rabbitmq по вашему выбору. Также есть довольно простой способ его протестировать (при условии, что у вас установлены docker и docker-compose):



ОЦЕНКА:если у вас есть Docker и Docker-Compose, это должно быть легко. Я только что клонировал репозиторий, изменил его для прослушивания сообщений из очередей и реализовал функцию ответа после обработки сообщения с помощью ML. Общая и пессимистичная оценка будет около 6 часов или около того.

ML-процессор

Машинное обучение — это всегда тяжелая пушка, чего вы хотели бы избежать в начале своего продукта. Хостинг современного трансформатора, даже если он лежит в основе вашего продукта, обходится очень дорого, но вы можете снизить стоимость с помощью… нетехнического подхода. Например, я намерен предложить своим первым пользователям сервиса функцию, которой пока нет в открытом доступе, — классификацию и упорядочивание их списка чтения на Medium. Вместо этого я пока не прошу никаких платежей и требую только адрес электронной почты, потому что таким образом я могу сообщить им о результатах обслуживания позже в течение дня. Характер услуги не требует немедленного ответа, и полезно использовать ее для собственной выгоды с точки зрения затрат на хостинг.

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

Суть кода препроцессора ML по-прежнему находится в репозитории promedium.



ОЦЕНКА: поскольку здесь я в основном использовал Huggingface Transformers для машинного обучения, это была довольно простая задача. Локальный хостинг системы также экономит мне время и деньги. Общая оценка будет около 2 часов.

Краткое изложение части 1

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

  • Ищите ненужные функции и отказывайтесь от них для прототипа SaaS. Ycombinator учит нас тому, что в лучшем случае основатели должны быть в состоянии создать что-то без единой строки кода. Так кто мы такие, чтобы спорить?
  • Используйте асинхронный дизайн, если ваше бизнес-кейс не получает немедленного ответа. Даже если это так, ищите потенциальный компромисс между вами и клиентами, когда вы предоставляете им эксклюзивные услуги, и они согласятся подождать.
  • Используйте конструкторы, такие как create-react-app или репозитории из git с базовой настройкой технологии, которую вы хотели бы включить в свою SaaS. Избегая сложности на ранних этапах, вы сможете масштабироваться в будущем.
  • Можно создать работающий прототип программного обеспечения как услуги в течение 24 часов.

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