Вчера Макс (
_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
Я нисколько не сомневаюсь, что многие из тех, кто читает мой ЖЖ в курсе, что это за сервис такой, но всё же немного расскажу о нём. Вы слушаете музыку. (Вы ведь слушаете музыку?) И установленная на вашем компьютере программа, отправляет на специальный сервер то, что вы слушаете. Там эта информация накапливается и потом вы можете увидеть статистику самого разного рода — от того какой жанр музыки вы чаще всего слушаете до Top10 исполнителей за определённый период. Также там пользователи могут между собой френдиться и смотреть кто что слушает. Фишек много, я второй день только пользуюсь, так что рассказываю вам ровно то, что сам пока знаю.
Если говорить о реальной полезности этого сервиса, то без него можно обойтись. Нет в нём ничего такого без чего, лично я, не смог бы обойтись. Даже более того — я без проблем могу и дальше им не пользоваться. Но. Попробуем? ;)
Я уже давно использую mpd, поэтому и клиент искал под него. Нашел два — mpdscribble и scmpc.
scmpc сходу у меня не завёлся, почему не знаю, внятной диагностики не смог из него выбить, даже под ltrace'ом. Ну да и пёс с ним, ведь mpdscribble заработал с полпинка после прочтения мана.
К сожалению, в Сизифе оказалась не совсем свежая версия mpdscribble, о чем её бывший мэйнтейнер сообщал в багзилле. Я собрал себе новую версию и стал новым мэйнтейнером этого пакета.
Сходу налетел на множество багов:
- в лог пишет в юникоде при однобитной локале
- дату в логе тоже ставит не местную, а по Гринвичу
- при выходе по Ctrl+C у меня падает (пока баг не весил и сам тоже не разбирался)
- ну и куча опечаток в мане
Но и это ещё не всё. Программа вообще отказалась что-либо постить на last.fm, потому что вся моя коллекция загодя «ободрана» от всех тегов!
Смутился, что говорить. Сначала думал теги все приделать обратно, написав скрипт. Потом вспомнил про проблемы с кодировками — поставлю у себя везде CP1251, а под юникодной локалью потом не увижу. Ну или просто даже на плэйере.
СтОит ли переделывать себя, свои привычки и свою музыкальную коллекцию в угоду last.fm??! Я решил, что нет! Поскольку я очень педантично отношусь ко своей коллекции и лет пять точно все песенки вручную подбираю, то названы они у меня все единообразно — «Артист - Название песни»
Поэтому я сразу же подумал так: а что если подхачить mpdscribble на тот случай, что если тега нет, то выдернуть имя исполнителя и название трека из имени файла по моему алгоритму?
Вот тут-то всё и началось. До 4 утра сидел я и патчил. Правил и компилировал, правил, компилировал, и так много итераций подряд пока не понял что ничего у меня не выходит ;(
Ну, начнём с того, что написать сходу кусок кода, который из строки по приведённому алгоритму вытаскивает нужное оказалось не так и просто. Во-первых, было поздно, во-вторых, эта работа с указателями часто довольно сложна в том плане, что нужно за всем смотреть. После этого я сделал следующий вывод: если есть возможность не оперировать указателями, а использовать регулярные выражения или любые другие средства, то их нужно использовать для уменьшения риска ошибок. Не, ну если для вас это не важно, то можете и сами :)
Пока я пытался сделать всё сам, да ещё и хорошо сделать я потратил время и когда оно стало извлекать значения тегов из имени файла я возрадовался. Но преждевременно! Оно их вытаскивало, но не постило. Тогда я понял, что не там я патчил. Тут-то я сделал ещё один вывод: не надо сразу делать всё хорошо и аккуратно, сначала нужно добиться, чтобы работало и лишь потом добавлять разные проверки на return value функций. Rationale здесь простое: в процессе достижения результата подходы и идеи могут изменяться очень много раз, особенно когда действуешь почти в слепую, по моему подходу, без планирования.
Я лёг спать. «Изрядно ощипаный, но не побеждённый» (с) Бременские музыканты
Весь день думал над всем этим. Понял, что я был рядом, но свернул в какой-то момент на неправильную дорогу, потому что здесь не работало. В этот раз я уже действовал иначе, взяв на вооружение ранее сделаные выводы (см. выше).
Я вас не утомил своим повествованием? :) Дальше рассказывать уже и нечего. Опять компилил и смотрел, правил, компилил и т.д.
В итоге — я сделал это! Запатчил, оно, вон, работает даже себе. Осталось только получше всё сделать, использовать регулярные выражения, вынести это в опцию и конфиг, обработать все ошибки и, наверное, попробовать отправить патч автору.
Ну, а самое круто, это что я нашел и исправил memory corruption в mpdscribble! Вот это был реальный мега experience!
P.S. Теперь многие смогут узнать какую
Updated(20080824): fixed typo