Image

Category:

Вчера Макс (Image_mast3r_) уговорил меня зарегистрироваться на last.fm.

Я нисколько не сомневаюсь, что многие из тех, кто читает мой ЖЖ в курсе, что это за сервис такой, но всё же немного расскажу о нём. Вы слушаете музыку. (Вы ведь слушаете музыку?) И установленная на вашем компьютере программа, отправляет на специальный сервер то, что вы слушаете. Там эта информация накапливается и потом вы можете увидеть статистику самого разного рода — от того какой жанр музыки вы чаще всего слушаете до Top10 исполнителей за определённый период. Также там пользователи могут между собой френдиться и смотреть кто что слушает. Фишек много, я второй день только пользуюсь, так что рассказываю вам ровно то, что сам пока знаю.

Если говорить о реальной полезности этого сервиса, то без него можно обойтись. Нет в нём ничего такого без чего, лично я, не смог бы обойтись. Даже более того — я без проблем могу и дальше им не пользоваться. Но. Попробуем? ;)

Я уже давно использую mpd, поэтому и клиент искал под него. Нашел два — mpdscribble и scmpc.

scmpc сходу у меня не завёлся, почему не знаю, внятной диагностики не смог из него выбить, даже под ltrace'ом. Ну да и пёс с ним, ведь mpdscribble заработал с полпинка после прочтения мана.

К сожалению, в Сизифе оказалась не совсем свежая версия mpdscribble, о чем её бывший мэйнтейнер сообщал в багзилле. Я собрал себе новую версию и стал новым мэйнтейнером этого пакета.

Сходу налетел на множество багов:


Но и это ещё не всё. Программа вообще отказалась что-либо постить на last.fm, потому что вся моя коллекция загодя «ободрана» от всех тегов!

Смутился, что говорить. Сначала думал теги все приделать обратно, написав скрипт. Потом вспомнил про проблемы с кодировками — поставлю у себя везде CP1251, а под юникодной локалью потом не увижу. Ну или просто даже на плэйере.

СтОит ли переделывать себя, свои привычки и свою музыкальную коллекцию в угоду last.fm??! Я решил, что нет! Поскольку я очень педантично отношусь ко своей коллекции и лет пять точно все песенки вручную подбираю, то названы они у меня все единообразно — «Артист - Название песни»

Поэтому я сразу же подумал так: а что если подхачить mpdscribble на тот случай, что если тега нет, то выдернуть имя исполнителя и название трека из имени файла по моему алгоритму?

Вот тут-то всё и началось. До 4 утра сидел я и патчил. Правил и компилировал, правил, компилировал, и так много итераций подряд пока не понял что ничего у меня не выходит ;(

Ну, начнём с того, что написать сходу кусок кода, который из строки по приведённому алгоритму вытаскивает нужное оказалось не так и просто. Во-первых, было поздно, во-вторых, эта работа с указателями часто довольно сложна в том плане, что нужно за всем смотреть. После этого я сделал следующий вывод: если есть возможность не оперировать указателями, а использовать регулярные выражения или любые другие средства, то их нужно использовать для уменьшения риска ошибок. Не, ну если для вас это не важно, то можете и сами :)

Пока я пытался сделать всё сам, да ещё и хорошо сделать я потратил время и когда оно стало извлекать значения тегов из имени файла я возрадовался. Но преждевременно! Оно их вытаскивало, но не постило. Тогда я понял, что не там я патчил. Тут-то я сделал ещё один вывод: не надо сразу делать всё хорошо и аккуратно, сначала нужно добиться, чтобы работало и лишь потом добавлять разные проверки на return value функций. Rationale здесь простое: в процессе достижения результата подходы и идеи могут изменяться очень много раз, особенно когда действуешь почти в слепую, по моему подходу, без планирования.

Я лёг спать. «Изрядно ощипаный, но не побеждённый» (с) Бременские музыканты

Весь день думал над всем этим. Понял, что я был рядом, но свернул в какой-то момент на неправильную дорогу, потому что здесь не работало. В этот раз я уже действовал иначе, взяв на вооружение ранее сделаные выводы (см. выше).

Я вас не утомил своим повествованием? :) Дальше рассказывать уже и нечего. Опять компилил и смотрел, правил, компилил и т.д.

В итоге — я сделал это! Запатчил, оно, вон, работает даже себе. Осталось только получше всё сделать, использовать регулярные выражения, вынести это в опцию и конфиг, обработать все ошибки и, наверное, попробовать отправить патч автору.

Ну, а самое круто, это что я нашел и исправил memory corruption в mpdscribble! Вот это был реальный мега experience!


P.S. Теперь многие смогут узнать какую гадость музыку я слушаю — http://www.lastfm.ru/user/php-coder

Updated(20080824): fixed typo