My Google Summer of Code 2022 summary

What and for whom

Organization: MetaBrainz Foundation
Project: MusicBrainz Picard
Mentors: Laurent Monin (zas) & Philipp Wolfer (phw)
Main focus: Introducing single-instance mode in Picard 3.0
GSoC website: Link

What has been done: TL;DR edition

  • Picard works in single-instance mode by default, allowing to force-spawn a new instance
  • Picard accepts not just file paths but also URLs, MBIDs and commands as command-line arguments
  • The command-line arguments are sent to the existing instance (and processed by it) if possible
  • Picard can execute commands passed by the command-line interface; e.g. save all files, show the Picard window or close the app
  • Picard can also load the commands from a text file

List of pull requests

Single-instance mode

  • Picard#2116: A big commit where the whole single-instance mode for Picard was designed and introduced (only for file paths though)
  • Picard#2135: Fixed problems with exiting the app, caused by Picard#2116
  • Picard#2130: Supported URLs (with MBIDs) and mbid:// links (documented there) can be passed with file paths via CLI to an existing (or to a new one) instance
  • Picard#2137: Supported commands (like QUIT or SHOW) can be passed via CLI to an existing instance

Picard remote commands enhancements

  • Picard#2141: REMOVE_EMPTY & REMOVE_UNCLUSTERED commands added
  • Picard#2142: LOAD command, extending the positional arguments’ functionality, added
  • Picard#2143: FROM_FILE command, executing a command pipeline from a given file, added
  • Picard#2144: CLEAR_LOGS command added
  • Picard#2145: Fixed errors with the FROM_FILE command
  • Picard#2146: WRITE_LOGS command, allowing to save Picard logs into a file, added

Code refactoring

  • Picard#2080: Code explicitly marked as deprecated got removed, my initial commit to get to know the Picard’s codebase and workflow
  • Picard#2127: Minor patch, unparsed args are now ignored as they were not used anywhere
  • Picard#2139: Refactored the whole process of passing arguments to Picard, replaced ‘%’-formatted strings with f-strings, more than one arguments can be passed correctly to a command

Other

What have I learnt during GSoC 2022

  • How to work with other people on GitHub
  • How to improve my git experience (e.g. hooks)
  • How one can handle inter-process communication, basically I have researched:
    • pipes
    • named pipes
    • sockets
    • dbus
  • How to use Windows API with Python
  • Differences between Windows and Unix pipes
  • \0 is the only character that is prohibited on both Windows & Unix in path names
  • /tmp is not the recommended way to store non-persistent app data on *nix
  • os._exit might be useful when pythonic threads get broken
  • Importing a tuple in Python is underrated. git diff gets cleaner, as one sees only the additions

Some personal thoughts

  • Python is a really decent language that helps with starting one’s programming journey but the deeper I went, the more annoyances I have encountered (that is why I ended up starting to work as a C++ dev)
  • Ultra-safety is a double-edged sword: good luck terminating Pythonic futures/threads with file operations
  • CI/CD and testing in general is as important as decent codebase
  • If one can plan their time well, flexible work hours make their work both more effective and more enjoyable
  • Python sometimes change for worse or breaks the code without any reason (e.g. they have switched from using a mode into w on pipes, ref: LINK)
  • I will not start any new personal project in Python (especially one using multi-threading, multiple processes etc.), unless forced to do so. Nu for scripting, filling the niche & exploring the functional programming, some statically-typed languages for bigger projects, games, research, etc.
  • Impostor syndrome is just an another excuse to procrastinate. Do not be scared to learn & do new things but also ask smart questions. Everyone makes mistakes but if you made it to this org, you are a good fit and have enough qualifications

Special thanks

The whole MetaBrainz community is awesome and I am glad I have become a part of it, but I would like to express my special gratitude to the people I have directly worked with in any way 🙂 (alphabetical order by github username)

MusicBrainz Server update, 2022-09-06

This release mostly consists of small bug fixes and improvements. One bigger bug fix (MBS-12497) involves an issue where it was impossible to apply any edit which would cause an artist credit with any redirects pointing to it to be removed. Sorry about your stuck edits, people! They should now pass.

A new release of MusicBrainz Docker is also available that matches this update of MusicBrainz Server. See the release notes for update instructions.

Thanks to chaban, HibiscusKazeneko, jesus2099, Mineo and sammyrayy for having reported bugs and suggested improvements. Thanks to ikerm2003 and salo.rock for updating the translations. And thanks to all others who tested the beta version!

The git tag is v-2022-09-06.

Continue reading “MusicBrainz Server update, 2022-09-06”

MusicBrainz Server update, 2022-08-22

It’s time for more fixed bugs and refactoring/maintenance tasks.

A new release of MusicBrainz Docker is also available that matches this update of MusicBrainz Server. See the release notes for update instructions.

Thanks to CatQuest and otringal for having reported bugs and suggested improvements. Thanks to hamaryns, ikerm2003 and salo.rock for updating the translations. And thanks to all others who tested the beta version!

The git tag is v-2022-08-25-hotfixes.

Continue reading “MusicBrainz Server update, 2022-08-22”

Picard 2.8.3 released

Picard 2.8.3 is a maintenance release for the recently released Picard 2.8 which fixes a potential crash in the album search dialog and provides updated translations.

The latest release is available for download on the Picard download page.

The detailed changes for this maintenance release are below. For an overview of the new features since Picard 2.7 please see our detailed release announcement for Picard 2.8 and the changes in Picard 2.8.1 and Picard 2.8.2.

Thanks a lot to everyone who gave feedback and reported issues.

Continue reading “Picard 2.8.3 released”

MusicBrainz Server update, 2022-08-08

This is a small release since we’ve been resting (and sometimes fully on holiday) for the summer. The most visible change for website users is that the “Ratings” tab for ratable entities is now a “Reviews” tab, and it also includes ratings and reviews from CritiqueBrainz. We used to only display these for release groups – now you can see them for every entity that supports reviews (artists, events, labels, places, recordings, release groups and works). We’re hoping having this reminder that things can be reviewed will encourage more users to have a say and let us know about their favourite – or less favourite – music!

Also: for people running a mirror server who updated to our May schema change and want to use tags and genres: sorry, we broke your tags table. Please check our separate blog post on how to run a script to fix it.

A new release of MusicBrainz Docker is also available that matches this update of MusicBrainz Server. See the release notes for update instructions.

Thanks to chaban and rdswift for having reported bugs and suggested improvements. Thanks to mfmeulenbelt and salo.rock for updating the translations. And thanks to all others who tested the beta version!

The git tag is v-2022-08-08.

Continue reading “MusicBrainz Server update, 2022-08-08”

Steps to fix missing genre and tag data on MusicBrainz mirror servers

If you recently updated your mirror server to the 2022-05-16 schema change release, we’re sorry to say that a bug in our upgrade script caused aggregate genre and tag data (if you had imported any) to be deleted. If you need this data, it can be re-imported from a recent dump, and we’ve written a script to help automate that.

You can safely ignore this post if

To restore the genre and tag data, follow these steps:

  1. Ensure you’ve replicated up to the most recent replication packet available. If you’re not sure, run ./admin/replication/LoadReplicationChanges. If you’re up-to-date, it should log “Replication packet … is not available.”
  2. Run git checkout production && git pull origin production.
  3. Turn off any cron jobs that update the database, including for replication.
  4. Run ./admin/sql/updates/20220720-mbs-12508.sh.
  5. Restart any cron jobs that you disabled.

You can verify that this process worked by checking the number of tags in the database: echo 'SELECT count(*) FROM tag' | ./admin/psql READWRITE. It should be over 200,000.

Sorry for the inconvenience, and let us know if you encounter any further issues.

MusicBrainz Server update, 2022-07-18

This release is very small, mainly consisting of minor improvements related to genre relationships. We have quite a few of those now, including links to Wikidata and Rate Your Music for pretty much any genre that has matching entries in those sites and links between many genres and their country of origin. We’re also fixing one bug with event setlist display that had probably been there since we introduced events – whoops!

A new release of MusicBrainz Docker is also available that matches this update of MusicBrainz Server. See the release notes for update instructions.

Thanks to chaban and sound.and.vision for having reported bugs and suggested improvements. Thanks to mfmeulenbelt, outsidecontext and salo.rock for updating the translations. And thanks to all others who tested the beta version!

The git tag is v-2022-07-18.

Continue reading “MusicBrainz Server update, 2022-07-18”

Picard 2.8.2 released

Picard 2.8.2 is a maintenance release for the recently released Picard 2.8 with fixes for reported issues and updated translations.

The latest release is available for download on the Picard download page.

The detailed changes for this maintenance release are below. For an overview of the new features since Picard 2.7 please see our detailed release announcement for Picard 2.8 and the changes in Picard 2.8.1.

Thanks a lot to everyone who gave feedback and reported issues.

Continue reading “Picard 2.8.2 released”

MusicBrainz Server update, 2022-07-03

This is a small release in number of tickets, but it finally adds the functionality to add relationships to genres. As such, you can now find out what għana or harsh noise wall actually are by simply reading their Wikipedia extracts. We can also store aliases for genres now, so while we still don’t do anything with that information directly, we do indicate that “hiphop” and “hip-hop” are alternative ways to write “hip hop“. Eventually, the plan is to combine these with the main genre in smart ways.

NB: As a side effect of adding new edit types for genres and genre aliases, the daily subscription emails failed for a few days. After this release the emails are working again, and you should have received the edits for all the missing days in your first email after the update.

A new release of MusicBrainz Docker is also available that matches this update of MusicBrainz Server. See the release notes for update instructions.

Thanks to chaban and selflessself for having reported bugs and suggested improvements. Thanks to Mellthas, mfmeulenbelt, rinsuki and salo.rock for updating the translations. And thanks to all others who tested the beta version!

The git tag is v-2022-07-03.

Continue reading “MusicBrainz Server update, 2022-07-03”

MusicBrainz Server update, 2022-06-20

This release includes the first genre improvements made possible by the May schema change, plus a bunch of small fixes and improvements. Annotation pages have been converted to React; if you notice anything strange with annotations, it might be a new regression so make sure to report it!

A new release of MusicBrainz Docker is also available that matches this update of MusicBrainz Server. See the release notes for update instructions.

Thanks to anshuman73, chaban, Lotheric, selflessself and yindesu for having reported bugs and suggested improvements. Thanks to mfmeulenbelt and salo.rock for updating the translations. And thanks to all others who tested the beta version!

The git tag is v-2022-06-20.

Continue reading “MusicBrainz Server update, 2022-06-20”