Сначала я радовался Apple Music, потом пользовался по привычке и вот, в какой-то момент, он меня начал раздражать… Нормальный человек воспользовался бы другим сервисом или просто смирился, но я - программист. Так на свет родилась идея написать свой клиент для Apple Music, в результате появился 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 есть рекомендации, но они разбиты на категории и представлены горизонтальной прокруткой - что не очень удобно для быстрого просмотра. Нет возможности прослушать все рекомендации единым списком воспроизведения.
Именно по-этому в 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 - найдите новую классную музыку для себя и напишите в комментарии свое мнение и идеи.
Спасибо, что дочитали!