email-logo

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

Технологии

LeadBean.com — это генератор/конструктор лендингов, разрабатывать который было безусловно интересно. Как мне кажется, каждый фронтенд-разработчик наверняка хотел сделать что-то подобное сам.
Весь фронтенд и, в частности, конструктор лендингов сделан на React‘е: думаю вы уже, как минимум, слышали об этой библиотеке. Серверное приложение написано на фреймворке Sails.js: он основан на популярной библиотеке Express.js, имеет большое количество плагинов (хуки, hooks) и драйверы под популярные БД. О нем, может быть, слышали не все, но это очень хороший фреймворк. Стоит упомянуть, что его разработчики вдохновлялись фреймворком Ruby on Rails. Весь код — клиентский и серверный, написан на ES6/7 и собирается с помощью Babel. Серверная инфраструктура построена на Docker-контейнерах и поднимается с помощью Docker Compose‘а. Также мы пользуемся сервисом CircleCI, где налажены непрерывная интеграция и непрерывная поставка:

  1. Собираем Docker-образы.
  2. Поднимаем всю инфраструктуру с помощью Docker Compose’а.
  3. Прогоняем различные тесты.
  4. Затем деплоим образы на наш сервер.

Теме Docker’а и непрерывной интеграции я планирую посвятить отдельный пост.

Опыт

Конечно же, работая над таким проектом, было приобретено большое количество опыта. Например, тот же React был изучен во время работы над клиентской частью. Также я никогда не налаживал процесс непрерывной интеграции и непрерывной поставки до участия в этом проекте, но мне всегда хотелось попробовать, и вот — желание сбылось. С Docker’ом знакомство тоже проходило уже во время работы.

За этот год я узнал многое, но самым запоминающимся оказался совет автора стартапа – Александра Макеева. Он рассказал о том, как правильно строить файловые хранилища: некоторые файловые системы имеют лимит на максимальное количество файлов в папке, очевидный вариант обойти это ограничение — создавать папки. Как это реализовано у нас: каждый пользователь в базе данных имеет уникальный 32-значный идентификатор, состоящий из [a-zA-Z0-9] (к примеру, smqR7сqVMGP2bsk3K6yD44BFRj9ytWNx), ну а путь к папке для файлов пользователя получаем путем добавления слеша после второго и четвертого символов (sm/qR/7сqVMGP2bsk3K6yD44BFRj9ytWNx). На самом деле, что-то похожее сделано и в git:

$ tree .git/objects
.git/objects
├── 00
│   ├── 02cf96d730544feb3b282cb7919cd093a35d02
│   ├── 25ba40a42c1fd521765afaa0f3efcb45bb3553
│   ├── 2a0b3fa586558017e7170bd8f4723395231a7b
│   ├── 4361bdb9e39247c92675622a331720c7296fb2
│   ├── 679e8accac33a55aa11618569552f65e0e042f
│   ├── 935b9987e974b3f93d82821224240fd834c196
│   ├── 9496e9106faa2cec95dc4fe0ae651a758f77dc
│   ├── a0d87cc90304486215d2b068f3a3f8655bb4e4
│   ├── c225377d312e50257c7a162b177d3fbb0c0a08
│   ├── f5c0b495b17c906b5721a9b5a92494061fecd2
│   └── f8fe952033df92b71815e6c76cf56b42f9aca8
├── 01
│   ├── 0b63137e36d57abb409919e0e399dac79da387
│   ├── 2486bcbfc54409b7ec0235768ed4ee8ffa7b38
│   ├── 28121081c95e3368d787ea8392956422e7d4d7
│   ├── 34415d9171afb516aa4b876125fd4c988448b5
│   ├── 4229cd9f53d1bfc7433af06f7984a01242bdf0
│   ├── 4e69e684a486ab000eeda8281438aabfd5b440
│   ├── 6a57229d6ddaf08a8c6e0b1a85ebbe339f7f02
│   ├── 75983508057bf64375b683070920d2b5cd3ced
│   ├── ba69138dff6b20792cf069fb1839b382322c06
│   └── f70a398fac890bc370dbe57e9f384d177b16cb
...

Open Source

Open Source — это не только бесплатные программы, библиотеки или фреймворки, но и целое сообщество, в котором каждый может помочь в разработке и развитии какого-либо проекта с открытым исходным кодом. Если вы используете библиотеку с открытым исходным кодом и обнаружили внутри нее баг, который сильно вам мешает — можете без проблем создать pull request в репозиторий этой библиотеки с исправлением найденного бага. Если вам не хватает какого-то функционала — история та же. Собственно, за это время такое случалось несколько раз:

Ну и несколько библиотек, реализованные мной:

  • react-deep-link и react-freezer-link — миксины для React’а, предоставляющие удобный интерфейс для работы с текстовыми полями и т.д.
  • style-templateify — плагин для browserify, для трансформации шаблонов стилей в JavaScript-функции.
  • i18n-for-browser — реализация i18n-node, адаптированная под браузеры.
  • Localer — утилита, которую мы используем для проверки локализаций: какие строки не переведены, какие переводы не используются.

Год был интересный и пролетел практически незаметно, обязательно подведу такие же итоги еще через год!

Seo wordpress plugin by www.seowizard.org.