Владимир Зарыпов (krre31) wrote,
Владимир Зарыпов
krre31

Category:

Океан. MVP

Вы, наверное, подумали, что за странные такие буковки нарисованы в заголовке? А это я подражаю эффективным менеджерам. Они любят изобретать всякие никому не нужные аббревиатуры и термины. Типа Scrum, Agile, MVP. В переводе на русский язык MVP означает минимально жизнеспособный продукт (minimum viable product). Это когда "х..як, х..як и в продакшен", а в самом продукте в это время ещё ничего толком нет. В качестве примера обычно приводят Uber. Они вышли на рынок с приложением, которое единственно, что и умело, так это связывать водителя с клиентом, но и этого оказалось достаточно, чтобы захватить мир.

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

Вводим название и описание манделы, нажимаем кнопку "Отправить".


Мандела отправляется на сервер и попадает в базу данных.


Казалось бы, что тут может быть сложного? Описание процесса заняло всего две строчки. Однако на то, чтобы всё это заработало, у меня ушло полтора месяца. Это было непросто, очень непросто. Временами процесс застревал и не мог сдвинуться с места в течение недели. А всё потому, что Rust, на котором я пишу бэкенд, в высшей степени хитёр и коварен, сходу его не одолеешь. Куда ни сунешься, всюду всё нельзя. Забота о безопасности обращения с памятью просто маниакальная. Это первая особенность. Вторая - все программы на Rust пишутся так, словно они многопоточные. Даже если программа однопоточная :)) В итоге программирование превращается в искусство подбора хаков, чтобы перехитрить компилятор, и, пока не выучишь весь необходимый набор хаков, с места не сдвинешься. Поэтому многие программисты долго не выдерживают и бросают это раздражающее занятие. Получается так, что этот язык или любят, или ненавидят.

И все же, как бы трудно ни было с изучением Rust, язык этот чудесный! У меня после 10 лет знакомства с C++ при сравнении этих двух языков не возникает сомнений в том, насколько далеко в развитии оторвался Rust. На C++ можно быстрее состряпать рабочую программу, но потом месяцами, а то и годами бороться с проблемами, вылезающими в рантайме, особенно, если программа большая. Не говоря о том, что C++ - язык настолько древний и заплесневевший, что многие языковые конструкции в нём устарели ещё тогда, когда я впервые сел за компьютер. На Rust же зачастую трудно добиться того, чтобы программа хотя бы запустилась, но зато потом она просто работает и не создаёт проблем.

Также одна из самых замечательных плюшек Rust - это экосистема. На C++, если вдруг понадобилось использовать какую-то строннюю библиотеку, то проще всего накрыться простынёй и медленно ползти на кладбище. Сперва надо скачать откуда-то исходники, потом попытаться их откомпилровать, в лучшем случае каким-нибудь богомерзким CMake, потом попытаться слинковать, что получилось. В большинстве случаев ничего не выйдет, потому что где-то с чем-то версии не совпали. Иногда на все эти танцы с бубном уходим целый день. Адъ и Израиль. В Rust прописываешь строчку с названием библиотеки, версию - и готово! Она сама скачается с репозитория исходников, скомпилируется и слинкуется. У меня ни разу не возникло случая, чтобы что-то не заработало.

Правда, с выбором библиотек я угадал не сразу. Поскольку в качестве СУБД у меня используется Postgres, то и библиотеку для работы с ней я взял соответствующую, которая так и называется postgres. Сперва всё шло хорошо, но рано или поздно наступает момент, когда начинает утомлять писать одни и те же SQL-запросы, и хочется придумать какую-то автоматизацию в виде ORM. Я подумал и решил не писать свою ORM, а взять готовую. В Rust для работы с базами данных самой большой популярностью пользуется библиотека diesel. Видимо, фанаты "Безумного Макса" название придумали. В Rust это распростраённое явление, когда библиотеки называются в честь каких-нибудь фильмов. Имена типа hyper, r2d2, warp, diesel - в порядке вещей. Я изучил эту ORM и пришёл к выводу, что она весьма неплоха. Тем более, что бэкенд сайта crates.io, о котором я упоминал ранее, как раз на основе этой ORM и построен. Будет откуда код передирать. Словом, взял библиотеку в оборот, но по итогу пришлось потратить пару дней, чтобы переписать код с postgres на diesel.

Запросы с сайта на бэкенд отправляются в формате JSON-RPC. Никакого REST, прости Господи. От REST остался только HTTP в качестве транспорта. Так обработка запросов получается менее запутанной, и становится проще описывать возвращаемые ошибки. Для API-сервера, которому нет нужды отдавать HTML-страницы, я других, более продвинутых, вариантов не вижу.

Вот пока что и всё. Бэкенд работает, запросы с сайта принимает, в базу записывает. Но в интернете посмотреть мой MVP пока нигде нельзя, потому что он запускается только на моём компьютере. А чтобы в интернете запускался, нужно сперва прикупить какой-нибудь дешёвенький VPS. У меня же сейчас нет желания на него тратиться, учитывая, что сайт по сути ещё ничего полезного не делает. Да и карантин, сами понимаете, вещь разорительная :))
Tags: океан
Subscribe

  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 36 comments