Найти тему
It_challenge

Новый клиент знакомого сервиса

Оглавление

Сначала я радовался Apple Music, потом пользовался по привычке и вот, в какой-то момент, он меня начал раздражать… Нормальный человек воспользовался бы другим сервисом или просто смирился, но я - программист. Так на свет родилась идея написать свой клиент для Apple Music, в результате появился Meows.app.

Meows.app
Meows.app

Вступление

Самое главное ожидание от Apple Music - это возможность послушать новую музыку, хорошую новую музыку. Эту самую новую музыку я искал и в рекомендациях, и в топовых плейлистах и просил друзей расшарить мне что-нибудь новенькое.

Главные проблемы и задачи на старте работы.

Три основных плейлиста рекомендаций - "Новая музыка", "Мои любимые треки", "Чилаут-микс" обновляются один раз в неделю в разные дни, причем музыка там чаще всего была не очень для меня. Логика подсказывала мне, что для улучшения рекомендаций мне надо активнее “лайкать”(Love) и “дизлайкать”(Dislike) песни, но Apple сделали это действие совсем не простым, а еще я постоянно вынужден слушать песни, которые дизлайкнул. Показывать статус песни (Love, Dislike) Apple тоже не стремится...

Для изменения рейтинга нажать на три точки...
Для изменения рейтинга нажать на три точки...

С рекомендациями не повезло, но ведь есть еще популярные плейлисты скажете Вы и будете отчасти правы, но есть два момента:

  • Эти плейлисты не так просто найти
  • Российский топ - это очень своеобразный для меня список песен, а сменить страну Apple не позволяет...
В Apple Music сложно искать новую музыку

На компьютере спасала возможность запустить скрипт пролистывания Dislike песен, но поиску новых это не помогало, да и кнопки рейтинга запрятаны так же далеко.

Мотивация

Это далеко не первый проект, который с пламенем в глазах я начал делать, но один из немногих доведенных до релиза, и, если честно - АЖ второй! Чтобы повысить шансы на успех я поставил перед собой цель\вызов\challenge “создать it-продукт с помощью ежедневной работы” - я каждый день делаю что-то "полезное" и пишу о проделанном. Сразу я писал в Telegram, затем перешёл на Medium - 18 января 2019 - был написан первый отчет, 19 января 2019 я купил доменное имя Meows.app, публичное бета-тестирование запустил 15 февраля 2019, и 26 июля 2019 я наконец-то опубликовал первую релизную версию приложения.

Техническая часть

Я вообще ни разу не мобильный разработчик, но так получилось, что примерно в это же время был релиз Flutter и я уже 3-4 месяца ковырял “Hello world”-ы на нем, технология мне нравилась, так что писать новый плеер для Apple Music решил на Flutter.

Технические детали проекта:

  • код на gitlab.com
  • Kubernetes кластер
  • оркестрация: Rancher 2
  • бэк: .Net Core
  • фронт: Angular Universal (8 версии)
  • база: MongoDB в кластере replicaset
  • мобильный клиент: Flutter (на данный момент только iOS)

Самые долгие технические проблемы были с переходом на Kubernetes для серверов и выбором “State Management” (управление состоянием) для Flutter - выбор пал на BLoC . Для ускорения работы с кодом я написал плагин для VsCode - который теперь экономит мне (и, надеюсь, не только мне) кучу времени и сил, хотя процесс развития кода стандартного шаблона страницы приложения идет постоянно.

создать it-продукт с помощью ежедневной работы

Самое главное и достаточно сложное - это очертить для себя рамки минимальной версии приложения… Поиск золотой середины между стабильностью, функциональностью и временем - кошмар! Постоянно хочется добавить новых возможностей, приходится буквально бить себя по рукам и вовремя останавливаться, и договариваться, что это будет сделано в рамках обновления уже после релиза... Бесконечный список уступок самому себе... Для борьбы с откладыванием запуска мне хорошо помогает привлечение пользователей - отдаешь на тестирование, тебе приходят отзывы, предложения, баги… и просыпается жажда - побыстрее выпустить релиз!

Результаты

У меня еще куча идей, но уже сейчас я горжусь результатом работы и пользуюсь Meows.app постоянно. Несмотря на то, что большая часть кода написана мной, огромный вклад в приложение, генерацию идей, переводы, разработку сайта, тестирование и работу с UI/UX - все это заслуга моей любимой жены - так что наша команда состоит из двух человек!

Чуть не забыл... Еще я задолбал всех своих друзей - у кого есть iPhone просил установить бета-версию, а у кого нет - показывал на своем и просил дать обратную связь по работе в приложении... А если серьезно - они очень помогли, особенно не IT-люди, благодаря им приложение стало гораздо более дружественное к людям.

Apple Music не отдает все плейлисты, даже через API, но я смог вытащить более восьми тысяч уникальных плейлистов, думаю, в скором времени их будет еще больше. На основе этого списка - построен первый экран приложения - “Все плейлисты”, по ним есть поиск и очень-очень классная кнопка “Dice” - игральные кости или рандом, она выбирает случайный плейлист из отфильтрованных, в выбранном плейлисте можно еще раз нажать кнопку “Dice” для повторного испытания своей удачи.

Ищем рок и включаем рандом!
Ищем рок и включаем рандом!

В Apple Music есть рекомендации, но они разбиты на категории и представлены горизонтальной прокруткой - что не очень удобно для быстрого просмотра. Нет возможности прослушать все рекомендации единым списком воспроизведения.

Рекомендации в Apple Music
Рекомендации в Apple Music

Именно по-этому в Meows.app есть плейлист “Все рекомендации” и сделан более “обозримый” вариант просмотра плейлистов. Мой плейлист “Все рекомендации” сегодня состоял из 1929 песен.

Рекомендации на одном экране.
Рекомендации на одном экране.

Кнопки “Love” и “Dislike” спрятаны от пользователя и почти никто их не нажимает или делает это очень редко, так как это совсем неудобно. Соответственно, Apple Music делает рекомендации в основном на основе прослушивания песен - это "подкидывание монетки для решения интегрального уравнения" и результаты оставляют желать лучшего. Чтобы дать Apple Music больше информации о предпочтениях пользователя кнопки “Love” и “Dislike” вынесены мной на экран проигрывания песни и теперь Apple гораздо чаще рекомендует мне хорошие песни.

Я даже не догадывался насколько много плейлистов в Apple Music...

Песни отмеченные “Dislike” - будут автоматически исключены из списка воспроизведения - меня это очень спасает в русском “Хиты сегодня”, а на основе “Love” Apple Music обучает свои нейронные сети предлагать Вам более приятные для вас треки.

В приложении Meows.app можно выбрать страну для получения песен из плейлистов собранных для каждой страны отдельно. Большинство таких плейлистов, находятся в разделе “Популярные плейлисты”. В плейлистах США - много рэпа, Японские удивляют иероглифами, а чаще всего я включаю Филиппины.

Популярные плейлисты разных стран
Популярные плейлисты разных стран

Когда все надоело и хочу просто приятную музыку - я включаю любимые песни. К сожалению, Apple не отдает списки песен пользователя, поэтому, чем больше вы пользуетесь meows - тем больше песен с рейтингом мы узнаем.

Любимые и нелюбимые песни.
Любимые и нелюбимые песни.

Рейтинги песен в Apple Music очень интересная тема - рейтинг песни привязан к SongId, но одна и та же песня может иметь десятки SongId и, соответственно, различных рейтингов, по-этому буквально перед релизом мне пришлось переписать всю работу с рейтингами, теперь песни и рейтинги привязаны к ISRC. Например, при получении всех рекомендаций бывает около 2000 песен уникальных песен, на которые приходится около 5-6 тысяч SongId, по которым необходимо получить рейтинги (ограничение на запрос в 100 id), провести анализ результатов и установить или удалить рейтинги (если на одну песню (ISRC) есть "Love" и "Dislike").

Кстати, нужно ли делать импорт/экспорт данных пользователя? Возможно Spotify, LastFm или другие сервисы принимают или отдают списки песен?

Попробуйте Meows.app - найдите новую классную музыку для себя и напишите в комментарии свое мнение и идеи.

meows.app для iOS

Спасибо, что дочитали!