Posted by David Harris
Tue, 07 Nov 2006 05:36:06 GMT
Ok, I’ve always had this theory about music, particularly the structure behind music as a whole. Obviously, most music genres are simply a fork of an older genre. For example, we know country music is the uncle of rap music. Blues led to country and R&B, R&B leading to rap.
I’ve always thought this could be easily represented by using Graph Theory. Each genre gets its own vertex, with each edge representing how close or distant each genre is to another.
My next idea is to actually plot the whole history of music using graph theory.
My problem is I don’t know a heck of a lot about graph theory outside the 4-color theory, traveling salesman, and the seven bridges problem. However, I think I can at least get something to capture data for the graph.
Obviously, music is subjective to the listener. So I think I will devise a certain way to gather the data via social networking. Obviously, that’s the best way to get data these days.
So I’m proposing a game, similar to the old Hot or Not (or maybe that’s still around). A user gets two songs at random, and must rate 1-10 how much they correlate with each other. I think from that I should easily be able to calculate edge distance, or how well genres in general correlate to each other.
If such a graph were available, and then colored by historical era, it would be easy to spot musical trends, almost to a point where one could predict which genres will be reinvented a decade from now, and which will be abandoned temporarily.
My only problem is finding a source for such songs, and having them be accurately mapped to a correct genre.
The other problem is that the set of genres allowed in current ID3 tags (and picked up by iTunes, CDDB, etc.) is very limited for this purpose. And I want sub-sub genres involved in this, like acid jazz or reggaeton or otherwise. I’m thinking I can devise a way to collect that data from the social network too.
The benefits of this are awesome, even though it’s going to take a bit of work. Imagine an algorithm that can accurately predict what a user will like given a single correct statement up front, with given probabilities. For example, the user can say “Coldplay is my favorite band and I enjoy Baroque music”, and an algorithm should easily traverse the graph to make the claim “there is a 72.3% chance you will also enjoy Weather Report, a Jazz Fusion artist. Click here to listen.”
Such a mathematical determination would easily trump algorithms used by Last.FM and other networks to choose favorite songs based on what everybody listens to. Those are good at what they do, but it’s not very good about predicting a new emerging artist’s fan base.
At the least, it will be cool to have a graph detailing the relationships between music genres. We already know Acid Jazz is a mixture between dance/electronica and jazz, but not to what degree they are related.
Sounds like a good CS senior project, if I can delay it that long.
Posted in Programming, Thoughts, Random | no comments | no trackbacks
Posted by David Harris
Mon, 20 Feb 2006 20:31:00 GMT
On the recent SvN blog by 37signals, I was a little perturbed by the people posting comments there.
I thought by now people would be embracing agile standards, less software, and good design principles for maintainability. But apparently some people are lost in wading through the older school of thought that more features makes a better application.
And sometimes, more features do make a better application, if and only if the application cannot survive without those features, or it would diminish the ability for the user to operate the software.
Especially on the web, less is more. There are millions of applications out there, and you are not going to make your mark with the application that does everything. The way you survive, and even thrive, is by making a great application that does one thing perfectly, and paying attention to how your users are using it.
The most valuable thing I have learned is that you cannot use agile methods by asking the user what he needs. Why? It’s very simple: the user doesn’t know what he really needs. The user DOES know what he has seen elsewhere, and will always ask for those sort of features. But what they really need is not those features, but it may be a completely different feature that does a better job than the one he thought of.
The way to go about that is not asking your users what they need, it’s to listen to their complaints, consider what everybody is saying, and find a way that solves it creatively and in a better way than they are asking. If people are asking for timestamps down to the microsecond, why are they asking for that? Well, in the end it may be just to uniquely identify each record to point it out to others. Yet this same problem can be solved in less code with simply adding an anchor to each post and providing a hyperlink generator. Or perhaps you can “tag” a record a certain way, and let people look for the tags. Or maybe clicking a record highlights it, which not only saves your favorites, but also could provide a way to see what you deem as important.
Obviously it doesn’t stop there. In web software, we have to figure out a way to keep feature creep out. The best way I know of is to just say no. Develop a list of boundaries for your software, and adhere to them. Define what your software will and won’t do at time of release, and only deviate in extreme cases or when you think the product will actually benefit. Users eventually dictate the course of a product, but in the end the developer is the artist. As a musician, do I make music for other people, or myself? Only the former if I’m a sellout. I can make a lot of profit and have a gargantuan behemoth of a Web 2.0 taggable application that really just sucks the life out of me. And where is the programming joy in that?! Give me something I love to work on any day over an application that fills every need a user might or might not have. In the end, my ability to fix the application is more important than the trends and whims of my users.
Posted in Programming, Thoughts | 1 comment | no trackbacks