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
orSHOW
) 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
- Picard#2122 + Picard#2126: Github Actions gives quicker feedback by shortening the timeouts from 6 hours to 30 minutes
- Picard-Docs#174: Documented my changes
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 *nixos._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 intow
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)