Превратить идею в сторонний проект в готовое приложение
Каждый разработчик должен попытаться найти время для работы над побочным проектом, чтобы улучшить свои навыки разработки или утолить свой творческий голод. Это может быть сложно, имея работу на полный рабочий день, но прелесть побочного проекта в том, что вы можете работать над ним в своем собственном темпе. Первый шаг - найти идею, над которой вы хотели бы работать. Это может быть что угодно, но это очень поможет с откладыванием, которое в конечном итоге произойдет, если это будет что-то близкое к вашим собственным интересам.
Кроме того, не забывайте пробовать экспериментировать с новыми технологиями во время разработки, так как это поможет вы продвигаете свою карьеру, но при этом сохраняете ее интересной до конца.
Когда у вас возникла первоначальная идея, следующий сложный шаг - начать работать над ней. Даже если вы действительно начнете процесс (а в большинстве случаев вы этого не сделаете), есть большая вероятность, что вы откажетесь от проекта относительно скоро. Но будут идеи, за которыми стоит развиваться и получать удовольствие, пытаясь их довести до конца. Одна из таких идей - приложение CookList.
Идея из повседневного использования
Я искал побочный проект для работы, но все, что я начал, было быстро оставлено либо потерей интереса, либо чистой ленью. Некоторые идеи, которые у меня были, были либо слишком сложными, либо требовали большой работы (что нелегко было реализовать в одиночку). Я пытался найти что-нибудь, относящееся к моему распорядку дня. Один из моих самых больших интересов - это музыка, поэтому я попытался найти что-нибудь в этом роде. Я также являюсь постоянным пользователем Spotify, поэтому, когда я поискал в Интернете и обнаружил, что у них есть API для работы с их данными, я сразу же начал изучать его, чтобы составить план для приложения.
Не бойтесь записывать свои мысли, это помогает.
После некоторого исследования отличного и действительно хорошо документированного API Spotify я придумал корень идеи для приложения, которое поможет пользователям создавать плейлисты и открывать для себя новую музыку. , на основе понравившихся им художников. Сразу после этого я стал искать в Интернете похожие проекты, черпать вдохновение и находить новые вещи, которые можно добавить. Были некоторые приложения, которые действительно были близки к тому, что я изначально представлял, а другие, в конечном итоге, давали некоторые качественные идеи. Примечательно, что наиболее важными из них являются:
1. Music-Map - это веб-приложение, которое находит группы, которые наверняка понравятся пользователю, в зависимости от его любимой группы. Это часть более крупной системы открытий под названием Gnod или Global Network of Discovery.
2. Everynoise - отличный проект, который отслеживает и анализирует данные из Spotify для создания диаграммы рассеяния всех музыкальных жанров.
3. playlists - очень известное приложение, которое генерирует плейлисты на Spotify на основе одного исполнителя / группы, которую предоставит пользователь. Вы также можете искать и слушать плейлисты других людей.
4. Musicroamer - это веб-приложение, которое визуализирует отношения понравившихся вам артистов, генерируя график, начиная с одной группы / исполнителя, которую предоставит пользователь, с использованием данных last.fm.
Все вышеперечисленные проекты вдохновили меня и помогли доработать мою идею и создать нечто похожее, но тоже уникальное. Ключевое отличие этой идеи состоит в том, что пользователь создаст список художников, начиная с одного, который он предоставит, и последующего за ним, а также до его последующих выборов. Этот список будет служить «рецептом» для списков воспроизведения, поскольку он и другие пользователи позже смогут создавать списки воспроизведения со случайными треками от этих исполнителей. Кроме того, информация о выбранных артистах, а также треки из плейлистов будут визуализированы соответствующим образом. Итак, путешествие по созданию CookList началось (понятно? Потому что он создает «рецепты»… ха).
Разработка приложений
Затем вам нужно выбрать стек, с которым вы хотите работать. Что касается Front-End части, я спорил между выбором React (я только немного поигрался с некоторыми учебниками / небольшими проектами) или Angular (который является моей основной структурой в работе), и в итоге я выбрал Angular, потому что хотел проверить платформу Covalent UI от Teradata. Что касается Back-End, я поигрался с идеей приложения Spring-Boot, но в итоге я остановился на NodeJS вместе с Express Framework, поскольку он был бы гораздо более подходящим для нужд приложения. Что касается базы данных, я выбрал безопасный вариант - MongoDB.
Я начал реализовывать свою внутреннюю службу, создавая простые конечные точки, которые, как я знал, позже превратятся в фактические функции приложения. Еще один полезный момент, который можно сделать здесь, это то, что вам не нужно делать все с нуля. Ищите и повторно используйте то, что создали другие, и старайтесь на этом опираться. В этот момент мне очень помогли очень хорошие обертки NodeJS для API Spotify от thelinmichael. Используя это, я начал создавать конечные точки, которые искали исполнителей, затем получали связанных исполнителей, затем получали треки для определенного исполнителя и т. Д. Когда у меня была самая простая логика, написанная в конечных точках, я знал, что могу начать реализацию простого сопутствующего пользовательского интерфейса.
Пользовательский интерфейс приложений - это обычное приложение Angular 6, но, как я уже сказал, я хотел использовать с ним платформу Covalent UI. Первые версии приложения были построены исключительно на стиле пользовательского интерфейса Covalent, но результат мне не очень понравился. Хотя мне было удобно использовать все мощные компоненты платформы Covalent, эстетика ее была слишком похожа на панель инструментов, а не на приложение. Хотя я некоторое время придерживался своего первоначального решения, в конце концов я удалил большую часть Covalent и продолжил преобразование красивой темы HTML5 + CSS3 из html5up в код Angular. Более того, я хотел иметь возможность создать пару визуализаций, которые обогатят данные, которые я мог бы получить с конечных точек Spotify. Для этого я выбрал мощную библиотеку Echarts, с помощью которой я мог строить красивые диаграммы и диаграммы для целей приложения.
Кофе, настоящая сила разработчика
Разработка продолжалась, чтобы довести до конца основные функции идеи. Необходимые шаги можно резюмировать ниже:
- Пользователь должен иметь возможность печатать и искать исполнителя.
- Художники, похожие на искомого, будут доступны для выбора
- Каждый последующий выбор будет вызывать новый запрос для связанных художников (заполнение начального списка новыми / уникальными)
- Создание пула популярных песен от выбранных исполнителей и случайный выбор подмножества из них.
- Если пользователь хочет сохранить полученный плейлист в своем Spotify, авторизуйте его, войдя в Spotify и получив требуемый токен доступа.
- Создайте плейлист в профиле пользователя и добавьте нужные треки.
- Сохраните на MongoDB созданный рецепт и получившийся плейлист.
После первых этапов разработки возникли и другие идеи, например:
- кеширование ответов (node-cache - очень мощная библиотека для этого).
- сохранение функций трека в MongoDB для созданных списков воспроизведения, чтобы пользователи могли видеть графики рецептов без входа в систему.
- сохранение и повторное использование токена обновления пользователя вместо необходимости входа в систему каждый раз
- Фильтрация тегов по жанрам.
Используйте API Unsplash (вместе с их собственной библиотекой unsplash-js), чтобы загрузить случайное изображение и установить его в качестве обложки плейлиста.
Развертывание приложений
Когда все вышеперечисленное было закончено и я остался вполне удовлетворен результатом, я решил заморозить новые функции и продолжить развертывание приложения. Я поискал в Интернете, какие у меня были варианты обслуживания приложения NodeJS, и, хотя во время разработки я экспериментировал с Heroku, в конце концов я выбрал Google Cloud, который предлагает отличную бесплатную пробную версию, если вы можете потратить до 300 долларов на свой первый года, более чем достаточно, по крайней мере, для тех тестов, которые я хотел провести. Что наиболее важно, поскольку у меня был предыдущий опыт работы с инфраструктурой AWS, я хотел также проверить Google Cloud, хотя у меня был ограниченный опыт в основном с Google AppEngine. С тех пор я начал изучать Docker и Kubernetes, где у меня было очень мало знаний, и через некоторое время я смог создать образ Docker своего приложения, загрузить его в реестр контейнеров Google и через Kubernetes развернуть его в кластере с помощью инструмента gcloud cli. .
Не такие контейнеры
Последним шагом было сделать приложение по-настоящему общедоступным. Итак, я перешел в GoDaddy и купил новый домен .app, и после некоторых проблем (домены .app применяют https, я сначала не знал, что привело к некоторым странным ситуациям) CookList был запущен. для всех, чтобы увидеть и использовать.
Будущие улучшения
Есть еще много идей и функций, которые можно встроить в этот проект. Наиболее очевидным и отсутствующим для веб-приложений 21 века является социальная интеграция, такая как совместное использование facebook и т. Д. Помимо этого, следующей важной функцией основного механизма является возможность (по запросу пользователя с определенным флагом опции) смешивать по трекам от исполнителей / групп, которые вы не выбрали, но которые вам, скорее всего, понравятся. Другой - возможность находить связанные рецепты (на основе выбранных вами исполнителей), а также иметь возможность фильтровать рецепты по артистам, как вы это делаете сейчас, по жанрам. Также может быть хорошей идеей какая-либо другая форма визуализации или другой способ использования данных об объектах трека. И последнее, но не менее важное: это приложение также может стать мобильным, используя фреймворк вроде NativeScript или создавая его с нуля для Android и iPhone.
Подвести итог
Единственный настоящий плейлист
Вся эта работа заняла у меня почти 2 месяца, судя по истории коммитов Github, хотя большую часть этого времени я выполнял ограниченную работу в будние дни, так как большинство моих коммитов приходилось на выходные. За это время я научился использовать новую платформу пользовательского интерфейса, дополнительно развил свои навыки работы с NodeJS и MongoDB, а также познакомился и научился использовать Docker и основные функции Kubernetes вместе с облачной инфраструктурой Google. Вдобавок к этому, в конце концов, моя работа была воплощена в работающее приложение, которым я вполне доволен, и я вижу, что возвращаюсь к нему и реализую больше вещей либо на основе своих идей, либо на основе запросов пользователей.
Итак, я настоятельно рекомендую всем поступить так же. Выберите свой следующий побочный проект, начните его самостоятельно или в команде друзей, разрабатывайте функции, узнавайте новое и, самое главное, получайте от этого удовольствие. Если все вышеперечисленное присутствует, то процесс принесет вам большую пользу, а если вы доберетесь до финиша, то у вас также будет что-то работающее и доступное для всеобщего обозрения.