New virtual machine available via BitTorrent

We have finally created a new version of our Virtual Machine and we’re currently seeding it via BitTorrent. If you have some spare bandwidth and would like to help seed this torrent, please join it and leave your client running.

You can find the torrent file here. (edit: for the curious/disk-limited, the downloaded .ova is 10.13GB). Please read the instructions for how to use this VM.

You should consider this VM as beta quality as it not been tested at all. Let’s hope for the best!

UPDATE: We’ve got a workaround for getting this VM to work in VirtualBox. It works just fine under VMWare Fusion and Player.

UPDATE 2: We’ve added a second tracker to the BitTorrent.

Server update, 2013-07-22

We’ve just finished deploying the second update to musicbrainz.org for July. Continuing the trend, this release is primarily bug fixes with a few new improvements. Notably, people should be happy to hear that the Cover Art Archive now supports PNGs and GIFs, ISRC editing has become easier, and the release and relationship editors should be a little bit more stable. Many thanks to Nicolás Tamargo along with the MusicBrainz team for their continued work on MusicBrainz. Here’s what’s changed:

Bug

  • [MBS-3132] – Problems with track artist credits when seeding the release editor
  • [MBS-5310] – Artist aliases should not be shown for work relations when doing a release lookup
  • [MBS-5409] – Internal server error when artist begin year is 0
  • [MBS-5637] – Regression: Recording merges can result in duplicate relationships
  • [MBS-6058] – Artist Subscriptions overview page is contradicting itself
  • [MBS-6194] – regression : drums release relationships were invisible as long as there was at least one recording drums relationship
  • [MBS-6235] – Internal server error when using date of birth without century in profile
  • [MBS-6273] – Country names are no longer shown in the sidebar or in edits
  • [MBS-6275] – Diffs no longer work for release dates
  • [MBS-6276] – Release dates are badly aligned in edits
  • [MBS-6280] – Registering an account ignores DB_READ_ONLY
  • [MBS-6282] – Uploading cover art ignores DB_READ_ONLY
  • [MBS-6283] – Voting on edits ignores DB_READ_ONLY
  • [MBS-6284] – Cancelling edits ignores DB_READ_ONLY
  • [MBS-6285] – Verifying an email address ignores DB_READ_ONLY
  • [MBS-6286] – Editing profile/preferences/password ignores DB_READ_ONLY
  • [MBS-6288] – Adding ISRCs ignores DB_READ_ONLY
  • [MBS-6289] – Editing CD stubs ignores DB_READ_ONLY
  • [MBS-6290] – Removing subscriptions ignores DB_READ_ONLY
  • [MBS-6354] – Possible to edit after unsetting email
  • [MBS-6360] – Internal server error when trying to authenticate via digest auth with non-ASCII username
  • [MBS-6369] – No link to area when editing an artist, a label or anything that has an area inline search
  • [MBS-6401] – Regression: Default release group cover art is not (always?) the original release
  • [MBS-6403] – Resetting password ignores DB_READ_ONLY
  • [MBS-6410] – Internal Server Error
  • [MBS-6413] – Areas’ releases tab should show "This area is not currently associated with any releases" if empty
  • [MBS-6417] – JSON API does not return disc number information for media
  • [MBS-6426] – ModBot unable to close old edit release edits that cleared both date and country
  • [MBS-6454] – Pressing enter when editing a relationship type does not submit the form
  • [MBS-6455] – Internal server error displaying edit relationship type edits
  • [MBS-6468] – Relationship type documentation pages are not linked in appropriate places
  • [MBS-6486] – ModBot no longer enters remove relationship edits when using "Split into separate artists"
  • [MBS-6498] – Internal server error displaying an historic set track lengths edit
  • [MBS-6531] – area/not_found.tt doesn’t exist
  • [MBS-6536] – OAuth token expiration ISE
  • [MBS-6569] – JSON file uploaded to the IA has the wrong file extensions for GIFs/PNGs
  • [MBS-6578] – ModBot is unable to close Edit::Area::Merge edits

Improvement

  • [MBS-2411] – Login page should be encrypted (SSL/TLS)
  • [MBS-4114] – Cover art archive: Support .gif
  • [MBS-4671] – Enter "Remove relationship" edits as the same editor instead of ModBot when splitting artists
  • [MBS-5868] – Move ISRC editing to the edit recording page
  • [MBS-6022] – Cover art archive: Support .png UI Changes
  • [MBS-6414] – Wikidata URL cleanup should also remove the "fragment" part of the URL
  • [MBS-6457] – Relationship editor deals confusingly with deprecated relationships
  • [MBS-6575] – Provide more debugging information if the release editor fails to create edits

The Git tag for this release is v-2013-07-22.

Server update, 2013-07-08

We’ve just finished deploying the latest version of MusicBrainz on our servers. This release is again primarily a bug fix release, but as always we’ve got a couple of improvements in added too. Thanks to Michael Wiencek, Nicolás Tamargo, nikki and the MusicBrainz team for all their work on this release! Here’s a list of what’s changed:

Bug

  • [MBS-5892] – Make wikidocs links always go to the server the user is on
  • [MBS-5941] – Using the link to http://musicbrainz.org from beta.mb after starting to use the beta site redirects to beta.mb again
  • [MBS-6020] – Work types in the relationship editor still don’t sort alphabetically
  • [MBS-6272] – Countries are no longer linked in the release sidebar
  • [MBS-6325] – Moving a release with a release date into an empty release group does not provide it with a date (sorting doesn’t work)
  • [MBS-6327] – Development servers ask users to change passwords when logging in
  • [MBS-6331] – Internal server error entering an existing ISO code
  • [MBS-6384] – Internal server error looking up a disc ID in the JSON webservice
  • [MBS-6404] – Regression: it is impossible to have a track without "track #" field empty (despite edit doing just that passes without problem)
  • [MBS-6440] – Opening filter fails due to syntax error
  • [MBS-6485] – Blocking of /ws/1 URLs should be done in MusicBrainz-Server, not nginx config
  • [MBS-6491] – Editing an artist area should not be an auto-edit
  • [MBS-6501] – Internal Server Error: "Wide character in subroutine entry" trying to create an account with Unicode characters in the username or password
  • [MBS-6504] – Digest authentication is broken for new accounts until the password is changed
  • [MBS-6519] – Recording index page column span is incorrect
  • [MBS-6524] – Work type and lyrics language ordered differently for editing and display
  • [MBS-6548] – ModBot is unable to close Edit::Relationship::Delete edits

Improvement

  • [MBS-5487] – Edit search : Add the relationship type information to "remove relationship" edits
  • [MBS-5835] – Report of recordings with tracks which vary a lot in length
  • [MBS-6132] – Show filename in Add/Edit cover art edits as in removals
  • [MBS-6226] – Use new page version in the wikidocs edit page form
  • [MBS-6258] – Add accept/reject buttons to the edit search results pages on test servers
  • [MBS-6350] – Merge release events where dates are equal but release country in one or more instances is unknown
  • [MBS-6499] – Kill the nag

Task

  • [MBS-6432] – lyricstatus.com→decoda.com
  • [MBS-6526] – http://www.myspace.com/COUCOU → https://myspace.com/COUCOU
  • [MBS-6527] – Update SoundCloud URL cleanup to use https

The Git tag for this release is v-2013-07-08.

.NET / Mono bindings for libdiscid

There has been quite some activity regarding libdiscid in the last few months, here is some more: I have released dotnet-discid 0.2 which provides .NET / Mono bindings for libdiscid. The source is available at GitHub. For easy usage Windows users might want to use the NuGet package. Alternatively you can download source and binary releases at http://users.musicbrainz.org/~outsidecontext/dotnet-discid/. To use the assembly you will also need the native libdiscid release (e.g. discid.dll on Windows or any other native package for your platform). On Unix-like platforms you can just use the system wide installation of libdiscid.

No API docs yet, but the examples on Github will get you started. The library should be straight forward to use. This is an early release but it supports all the features provided by the latest libdiscid 0.5 (while still supporting earlier versions).  I don’t expect many changes in the API but I will provide better documentation soon.

ruby-discid 1.0

This has already been announced on the mailing list back in May: ruby-discid, the Ruby bindings for libdiscid, have been released in version 1.0. This libdiscid binding for Ruby is the successor of mb-discid. As libdiscid has gained quite a few features in the past I took the opportunity to simplify the API and do some fundamental changes to rubydiscid.

The most important features of this release are:
  • Full support for libdiscid 0.1 to 0.5, including ISRC and MCN reading and feature detection.
  • Uses FFI to load libdiscid, so no compilation is required.
  • Support for Ruby 1.8.7 – 2.0, jRuby and Rubinius.

The probably easiest way to install and use ruby-discid is by using the Ruby gem. For Ubuntu users there is a PPA and for Arch Linux users an AUR package available.

The source code is available on Github, there you will also find more detailed installation and usage instructions.

If you have previously used mb-discid you can continue using it, but you should consider updating to rubydiscid. The API is quite similar and simple enough to make that a painless process.

python-discid 1.0.0 (and 1.0.2) released

In februar I announced a beta version of the first python binding of libdiscid. A couple months have passed and I can now announce the first stable release of python-discid.

The main purpose is the calculation of MusicBrainz Disc IDs from a CD-AUDIO disc or a TOC of such a disc, but reading of ISRCs and the MCN (EAN/UPC) are also supported.
Disc IDs can be submitted without further dependencies. For lookup and ISRC submission it is recommended to use it together with python-musicbrainzngs.
Python 2 >= 2.6 or Python 3 >= 3.1 as well as libdiscid >= 0.2.2 are required. Newer libdiscid features need a newer libdiscid, but there are methods available to check for these conditions.

If you still have a program using python-musicbrainz2, I recommend upgrading to the combination of python-discid and python-musicbrainzngs, since python-musicbrainz2 uses a deprecated web service and is not actively maintained anymore.

The main website and API documentation is at readthedocs, the repository and bugtracker are at GitHub.
Official source tarballs are available on pypi and releases are announced in this blog. There are several linux packages available and listed in the documentation.

If you have been using a pre-release version of python-discid you will have to update your code.
Compared to python-discid 0.5.0 you now have to use discid.get_default_device(), rather than discid.DEFAULT_DEVICE. If you were using 0.4.0, you should also stop using DiscId() directly or a DeprecationWarning is displayed.

There is also a patch release 1.0.2 available, which has no code changes compared to 1.0.0.
There was an intermediate 1.0.1, which tried to make some convenience changes for beta users, but failed. 1.0.1 was never available as a tarball, but the tag and changelog exists.

Server Update, 2013-06-25

We’ve just finished pushing out another version of MusicBrainz. Sorry that we’re a day behind on this one, yesterday we had a few tests that needed fixing before we could release. This release is mostly bug fixes and small improvements, and should solve problems with the “remember me” login feature working incorrectly. This upgrade might have lost a few remember me tokens, but if you are still seeing problems after a few days of the site, please leave a comment on MBS-6471.

Many thanks to Lukáš Lalinský, Michael Wiencek, Nicolás Tamargo and the rest of the MusicBrainz team for their work on this release. Here’s what changed:

Bug

  • [MBS-3427] – "Internal Server Error" submitting CD Stubs with invalid data
  • [MBS-5524] – Edit relationship type edits are missing information for identifying the relationship type
  • [MBS-5903] – JSON webservice doesn’t return release-list in collection query
  • [MBS-5958] – Release editor did something very very wrong
  • [MBS-6027] – JSON webservice returns asin: null for releases with ASINs
  • [MBS-6073] – Inaccurate range of credits when grouped at the bottom of a release page
  • [MBS-6101] – Redis should only be required if sessions are used
  • [MBS-6206] – Soundtrack Collector URLs should not be possible at the Release level
  • [MBS-6244] – Private data dump contains bcrypt column and can’t be imported
  • [MBS-6261] – "Date unknown" is inconsistent with our handling of unknown values elsewhere
  • [MBS-6296] – Area alias links are shown for non-location-editors
  • [MBS-6315] – Recordings tab of the RE showing lots of [removed]
  • [MBS-6349] – Artist credits display wrong on add release edit
  • [MBS-6364] – "Possibly duplicate artists" report doesn’t show any results
  • [MBS-6374] – Release editor seeding is broken
  • [MBS-6383] – Can’t add search hint to area
  • [MBS-6416] – release editor loses track identifiers when editing a medium.
  • [MBS-6467] – "you may add a new label" in area search
  • [MBS-6471] – "Keep me logged in" is broken

Improvement

  • [MBS-2782] – "Edit medium" edit type > Don’t show pointless artists credits changes (e.g. when only join phrase has been changed)
  • [MBS-2848] – New "Add medium" artist credits section is cluttered and hard to parse
  • [MBS-3663] – "No" votes should allow time for the original editor to respond
  • [MBS-4652] – Add a link to How To under Documentation
  • [MBS-5911] – Display source for non-CAA cover art
  • [MBS-6205] – Clean up Soundtrack Collector URLs
  • [MBS-6207] – Check formatting for Soundtrack Collector URLs
  • [MBS-6259] – Bring back date/country columns in tables
  • [MBS-6352] – ExportAllTables::check_tables_completeness should be updated and used
  • [MBS-6363] – Update Twitter URL cleanup to use https

The Git tag for this release is v-2013-06-25.

Libdiscid 0.5.1 released

A new libdiscid version was uploaded today.

Changes:

  • LIB-40: discid_get_webservice_url() (web service version 1) is deprecated.
    Please use libmusicbrainz to gather metadata by disc ID
  • LIB-7: Rewrote data track handling, releases with multiple data tracks. This also fixes LIB-18 (no ID for DVDs) and LIB-9 (PS/PS2 CDs)
  • LIB-44: fix invalid disc IDs on first read of multi-session discs
  • LIB-37: Autotools optimization (non-recursive build etc.)
  • LIB-42: remove Windows 9x platform code
  • renamed openbsd platform code to netbsd, still used by both.

The data track/multi session disc handling was rewritten. This was started by Lukáš Lalinský quite some time ago and I finished this now. This should fix several issues with data tracks and data track handling works the same on all platforms now.

Christophe Fergeau contributed some changes to remove lots of clutter from the autotools build. This stops changing directories during the build all the time (non-recursive build) and should make it easier to see actual problems when building.

Additional contributions come from Philipp Wolfer and Sebastian Ramacher again.

Feedback needed:

We are (still) a bit stuck in the discussion for LIB-28 which also blocks several connected things in python-discid and possibly Picard.
The main question is how to name the “default device”, especially on Mac OS X. Usually real/internal device names are used. However, especially on Mac OS X these device names change quite frequently for various reasons, even when the same physical disc drive is “meant”. So I don’t know if using these makes any sense. It also might not be good to add these device names to a configuration file, since they will “break” easily (opening a .dmg before inserting the disc already breaks it).
I proposed using “1” to define “use the first disc drive”. I am no actual Mac user and really would like to know how you guys feel about this.
For Windows the drive letters are much more stable, but can change when USB disc drives are used. Using “1” is an option, but might make less sense, since drive letters are actually known to the normal user.
On Linux/BSD/Solaris the disc drive names are only used for disc drives (not for hard disks) and are quite stable.
This relates to python-discid#30 (should DEFAULT_DEVICE be a constant?) which again somewhat blocks PICARD-503 (using python-discid). This question is the only thing keeping python-discid from a stable API release.

LIB-28 is probably the best place for feedback, but you can also just answer here or in the announcement mail.

Information, documentation and other links are at:
http://musicbrainz.org/doc/libdiscid
That includes builds for Windows and Mac OS X.

Search server update: June 13

On 13th June we updated the search servers once more. Thanks for fixing bugs and adding Area support, Paul!

Release Notes – MusicBrainz Search Server – Version 2013-06-13

Bug

  • [SEARCH-297] – Webservice Json output for aliases when searching is inconsistent with output when doing a lookup
  • [SEARCH-302] – search server json output use singular for a list of release-groups.

Improvement

  • [SEARCH-292] – Include area info in the indexed search artist and label results
  • [SEARCH-299] – Ouput TrackIds

New Feature

  • [SEARCH-301] – Search for Area by ISO 3166 code

Task

  • [SEARCH-273] – Support for multiple country/release events on release as as part of schema changes
  • [SEARCH-286] – Add areas to the indexed search

Upcoming feature: contested edit extension

The next release (a week from Monday) will include a useful new feature: extending the expiration of edits that receive ‘No’ votes! I’d like to take a bit to explain how it’ll work.

The problem

Especially since the amount of time edits stay open was reduced to 7 days, but also before, several problematic situations could arise when edits were contested:

  • If voters cast ‘No’ votes shortly before the expiration of the edit, the original editor may not have time to respond to the concerns before the edit closes. As a result, it’s generally been considered bad etiquette to cast ‘No’ votes right before an edit expires unless the edit is particularly destructive.
  • In a somewhat related case, sometimes an edit can get many ‘No’ votes in short succession. Since 3 unanimous ‘No’ votes will close an edit, the period between the first vote cast and the edit being closed can be as short as an hour, which is certainly not enough time for the original editor or other voters to respond.
  • It’s also occasionally possible for edits to be put at risk of failing without an email being sent. Specifically, the current code only sends an email on the very first ‘No’ vote. Therefore, if a voter votes ‘No’ early in the voting period and later changes their vote, a second voter later voting ‘No’ would not result in an email being sent. However, a tied vote or a majority of ‘No’ votes will result in an edit being closed, so even a lone vote can tip the balance.

The solution

In light of all of these problems, the next release will work differently to give editors time to respond to votes against their edits.

In short: editors will always have at least 72 hours (three days) to respond after the first vote against their edits.

More specifically, and more technically:

To address the third point above, the emails for ‘No’ votes will now be sent whenever the count of ‘No’ votes goes from 0 to 1. That is: if two people vote ‘No’ with neither changing their vote in-between, only one email will be sent. But, in a case like the one described above, where an early ‘No’ vote is superseded and the total count goes back to 0, a subsequent ‘No’ vote will send a new email.

To address the second point above, ModBot will not reject an edit before its expiration time due to three unanimous ‘No’ votes unless 72 hours have passed since the earliest ‘No’ vote (that is, the vote which resulted in an email being sent). If the expiration time passes or an edit has three unanimous ‘No’ votes after 72 hours, the edit will be closed as usual.

Finally, to address the first point above, when new ‘No’ votes are cast close to an edit’s expiration time, the edit’s expiration time will be extended to allow 72 hours for response. This extension will, once again, only happen when the total count of ‘No’ votes goes from 0 to 1 – so only when an edit becomes contested and previously was not.

In total, these changes should hopefully ensure that editors are better informed about edits that are in danger of being voted down, and given sufficient time to respond to voter concerns.

In summary

First of all, this change will be fully live on Monday, June 24th. Before then, votes cast on the beta server may result in a small number of edits having their expiration times extended, but it won’t happen on the main server or for the majority of edits.

While editing: Rest assured you’ll be informed and given time to fix problems with your edits!

While voting: Don’t worry too much about casting ‘No’ votes when edits need improvement. Certainly be ready to supersede your votes if things do get fixed up, but if you find an edit in need of fixing just before it closes, or which already has a bunch of recent ‘No’ votes, don’t hold back or vote differently to give the original editor time to respond. This should take care of that for you!

Happy editing!