Announcing Webmosher PDF Print Email
Written by Fred Hirsch   
Wednesday, 30 May 2007

Well, we finally found a framework for our music cataloging project: CakePHP. Additionally, I have decided to use a "tagname" I have used on IRC and online forums for the name of the project itself: Webmosher. So, as an way of introducing this project, I will try to describe why I decided to build this project and how I think it will be useful to the web community.

The Origins

I really love music, and I have a large collection of songs on tapes, CDs and so forth. Over the years, it has grown to be a bit of an unwieldy mess. I realized that using a computer to organize my collection was key. I was a programmer, but as a good programmer, I am pretty lazy and didn't feel like I would need to do any work. Someone had already created some sort of way for me to organize my collection. This I found in the Collectorz software MP3 and Music Collector. Both are excellent, pure database type applications for sorting through all this mess. All I needed now was a way to easily tag all the MP3's I was ripping. To do this, I purchased Tag & Rename by Softpointer. I was good to go for awhile, but then I discovered that other members of my family were interested in my collection of tunes. Maybe their tastes weren't quite as diverse, but they often requested that I build CD's for them, or that they wanted to listen to "this song" or "that song". This troubled me, for I did not trust them with my beloved archived CD's or the collection database itself. What could I do? So, I began a search for an online music database application. This would allow everyone in the house access to a website that cataloged all my music and allowed them to listen to songs and build their own playlists on their own. Surely, someone would have had the same problem and built a good program for doing this? The answer turned out to depend on how robust a system you needed.

Troubled Times

There were only two web based systems that got close to what I needed: Ampache and Jinzora. While Ampache seemed to have a slightly better design, it didn't offer the nice features that Jinzora had. However, both solutions had some serious issues that led me down the eventual path of building my own application. Ampache was definately nice, but I found that its biggest shortcoming was also one of its major features: Basically, any changes needed in the files to support organization of the database had to be done using a command line process. This ended up being alot more trouble than it was worth. I also had problems with compilation albums that had multiple artists. This caused lots of problems with the display of these albums. My last issue with Ampache was how the collections are built. Every time you add new items to the collection on the file system, the application requires that the collection location be rescanned. This wasn't so bad, but when compared to Jinzora, which does the task dynamically, it ended up being just that much more work. Jinzora is a feature packed application, but I still had some problems with it. The biggest issue is how data was organized in the database. Its not well designed enough to manage dynamic changes to the organization of the various aspects of the collection. If I need to move an artist between genres, this can sometimes become a big headache to clear the old data and rebuild it in the new genre. There seems to be a caching system that sometimes prevents proper refresh of data. This took alot of work to figure out the problem and actually cleanup the cache manually. Thankfully, my collection is well organized enough right now, that this is a rare instance. Jinzora also has "issues" with compilation albums, but does a better job of handling them. In the end, I had to choose one system to tide my family over while I decided how to design my own. I chose Jinzora.

The Design Revelation

Jinzora's flaws weren't immediately apparent, it took some time and adding several hundred songs before problems began to emerge. In the end, it was the core data model that really caused problems for me. I found that as I added more songs to the collection, I wanted to add more ways to break down the organization. Jinzora simply didn't offer this. Ideally, I would say my favorite music site is AllMusic.com, and I felt that the most ideal way of dealing with my collection would be to emulate it somehow. My system would just contain the subset of data that existed in my collection. I didn't limit myself to the All Music site, I also decided to examine how layouts were done on MP3.com, Yahoo! Music and MSN Music. This gave me a solid foundation of all the data types I wanted in my application. So the core data sets will compose the basic application core. As I see the system, there are 4 core subsets of data to represent my music collection: Genres (styles of music), Artists, Albums and Songs. I actually call songs "performances" because a song as we use them in the collection are a performance of a song's composition. They are closely tied, but what happens if a song is performed by multiple artists, or remixed, etc. The data model has taken several iterations, been reanalysed and even evolves slightly as development begins, but it is a very solid representation of a music collection. The next key task was developing an interface that would allow browsing and finding music just as easy as storing it. Base pages were developed for each of the data subsets and mapped into a robust CSS based layout. We've gone through two distinct iterations of this design now, and expect at least a couple refactoring cycles before we get it finalized. For now, the system is based on a genre/style based browsing idealogy, and will be supported with a strong search engine capability.

The Long Road

The last focus of development will be building upon the core to create a group based music distribution system. One of the most basic aspects of this will be the user customization of the site based on their own preferences and authorized capabilities. This will allow individuals using the system to personalize the collection and create sub-collections (playlists) of the main system. I also want to ensure the system has a robust distribution system that allows real-time and resampled streaming capabilities. Additional areas of interest that I am considering include integration of statistics gathering and charting of popularity and perhaps even an e-commerce addon that would allow distribution based on purchases.
 

Login Form






Lost Password?
No account yet? Register