October 31, 2008 § Leave a comment
The last bunch of posts that I’ve made have all been about immediate work, so I wanted to write something a little lighter. I was going through mb-bugs, as I do daily, and it just hit me. I really do ♥ MusicBrainz 🙂
I’ve been around the project for 3, maybe even 4 years now – with increasing activity (obviously at the peak at the moment with the employment) – and I’ve seen MusicBrainz in various participation ‘states.’ But at the moment, I’ve got to say – this is easily the coolest.
We’ve got 2 paid developers, myself and Rob – but there’s so much more going on than that. #3981 is a brilliant example of this – we get a feature request from murdos (one of our great developers who’s been doing an incredible job recently), and shortly that’s turned around by outsidecontext who says he’s willing to do this work.
Seeing all this interaction between us developers really makes working for MusicBrainz at the moment a very exciting time, because I think when my current work is done (which is really out of the way for the community at the moment) – we’ll have 4 developers all working on the same codebase (or minor branches) for the MusicBrainz.
Also, it’s not just the developers – it’s the community too. The reason I’m here right now, is because of the positive “make it happen!” attitude in the general community – which I think is brilliant. Work a side, everyone is just generally a good person – and I’ve had numerous great conversations with MB fans both on and offline 🙂
So, MusicBrainz had it’s birthday a few days ago – so here’s a belated toast to Rob, and everyone who’s made MusicBrainz what it is! Let’s make it even better 😀
October 24, 2008 § 4 Comments
Hi folks, seems we’re a bit overdue for an update!
Work has been progressing well, after we made some important design decisions – I’ve mainly been focusing on 2 areas at the moment. The first of these areas is the moderation queue.
I have this looking fairly complete – it just needs polishing. At the moment you can view a list of all open moderations, view specific moderations, add edit notes and vote on these edits. I’m using a similar system to the existing code base, whereby each moderation has a template to show how the details of the change should be displayed. So one major area I still need to do is write all these change-templates.
Along with these templates, I still need to devise a system to filter edits (much like our current advanced edit search) – but I’d like to try and get something a little bit cleaner than the code we currently use. At the moment, once the user submits the search form, we hand craft a SQL query – which results in quite a lot of complex code. I’m considering using a chained system to formulate the query; something along the lines of
$c->model('Moderation')->filtered-> edit_type('MOD_EDIT_RELEASE')-> status('any')-> automod(0);
I’m hoping this will make for cleaner code in the controllers, but also the option to make use of specific moderation-filters in other places (maybe a per user dashboard, where users can decide what edits they want to see?)
Moving away from moderation, I’m working on the add release form, and I’m currently finding this one of the hardest challenges of the project. It’s also probably one of the most (if not the most) important forms we have on the site – so getting this working correctly is highly important. However, interactions with this form are very tricky to model.
The largest problem, is that the path is very much non-linear, for non-trivial edits. Let’s consider a 5 track, various artists release, with 2 release events. This would require the following steps:
- Specify that we need 5 tracks
- Enter the details of the release
- For each track, display a search form for the user to select the artist (my branch will not have AJAX until everything can be done without it).
- Search for the label for the 2 release events, allowing the user to select them.
- Enter a moderation note, and insert the moderation into the queue.
However, this can be become even more complex – consider the case where the artists/labels do not exist, so the user needs to be redirected to an add artist form. Or maybe the user wants to change an artist they have already confirmed… see how this is starting to become a little bit more complicated, with a very non-predictable path?
While each of these stages can be done on their own, the problem I am having is to work out a solution to keep track of the user progress, and make all of these stages transparently tie together.
If anyone has any experience working with muilt-page forms, I’m certainly curious to hear how you’re doing it. I’ve had feedback from some people pointing me towards a staleless RESTful solution, and others saying I should save the results in the session.
October 7, 2008 § Leave a comment
Hello Brainz 🙂
Another week down, and this one has been a bit more tricky than the first! Not in terms of workload, simply in terms of finding time to do work! I moved back to uni about a week ago, and with everyone moving in and meeting all the new guys in the flat, it sure has been tought to set aside 2-3 hours at a time… But nontheless, I have a status update for you!
I decided to spend the last week working on pushing out as many new moderation forms as possible. To shoot through the list: move track, merge labels, label editing, label creation, relate to url, remove release, subscribe/unsubscribe to labels & artists, add cc license, edit release attributes… and I’m sure I missed a few.
But more importantly, I made a few more refactorings to make the process of working with these forms simpler and clearer… I looked at the Form::Processor plugin, and while I don’t like all of it (a bit too much magic, even I agree there Lukas!) – I do like the helper methods for loading forms. This change also made me split the forms up and make use of some more inheritance making the actual code that little bit cleaner.
I made my first multiple step forms as well; these were pretty tricky, and have taken a fair bit of thought. There are still no forms that use many steps (add release, import, etc) – but this has been the start. MB-Catalyst now has a nice elegent way to do those “search for artist/label” forms (like when you move a release to another artist) – so that’s one more little generic component down.
So, that’s last week – what about this week? I started the day working on convert to mulitple artists/single artist, and have them nearly down, but I think I’m going down the wrong route. Lukas reminded me that there is still a lot of ugly code in the background. Now could be a sensible time to start putting some beauty cream on those warts. My work is certainly on schedule, almost all ‘common’ edits can now be done.
To leave you all with a question, where do you think I should head to go next? The moderation system is non-existant (and obviously critical) and some of the backend work is really crucial too… I also have some work for you lot if you’re interested, to hopefully encourage some light community participation (that’s what this branch is all about!)… more on that tomorrow 🙂