{"id":21812595,"url":"https://github.com/skelly37/gsoc-2022","last_synced_at":"2025-03-21T09:18:06.957Z","repository":{"id":109349947,"uuid":"517650399","full_name":"skelly37/GSoC-2022","owner":"skelly37","description":"My GSoC 2022 summary \u0026 thoughts","archived":false,"fork":false,"pushed_at":"2022-09-09T19:43:34.000Z","size":78,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-26T05:43:58.913Z","etag":null,"topics":["google","google-summer-of-code","gsoc","gsoc-2022","summer-of-code","thoughts"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skelly37.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-07-25T12:10:45.000Z","updated_at":"2024-09-09T18:30:26.000Z","dependencies_parsed_at":"2023-03-28T21:01:49.873Z","dependency_job_id":null,"html_url":"https://github.com/skelly37/GSoC-2022","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skelly37%2FGSoC-2022","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skelly37%2FGSoC-2022/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skelly37%2FGSoC-2022/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skelly37%2FGSoC-2022/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skelly37","download_url":"https://codeload.github.com/skelly37/GSoC-2022/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244767801,"owners_count":20507110,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["google","google-summer-of-code","gsoc","gsoc-2022","summer-of-code","thoughts"],"created_at":"2024-11-27T14:18:40.002Z","updated_at":"2025-03-21T09:18:06.934Z","avatar_url":"https://github.com/skelly37.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# My Google Summer of Code 2022 summary\n\n## What and for whom\n---\n### Organization: [MetaBrainz Foundation](https://github.com/metabrainz)\n### Project: [MusicBrainz Picard](https://github.com/metabrainz/picard)\n### Mentors: [Laurent Monin (zas)](https://github.com/zas) \u0026 [Philipp Wolfer (phw)](https://github.com/phw)\n### Main focus: Introducing single-instance mode in Picard 3.0\n### GSoC website: [Link](https://summerofcode.withgoogle.com/programs/2022/projects/ItQ0NNLd)\n---\n## What has been done: TL;DR edition\n- Picard works in single-instance mode by default, allowing to force-spawn a new instance\n- Picard accepts not just file paths but also URLs, MBIDs and commands as command-line arguments\n- The command-line arguments are sent to the existing instance (and processed by it) if possible\n- Picard can execute commands passed by the command-line interface; e.g. save all files, show the Picard window or close the app\n- Picard can also load the commands from a text file\n\n## List of PRs\n### Single instance mode:\n- https://github.com/metabrainz/picard/pull/2116: A big commit where the whole single-instance mode for Picard was designed and introduced (only for file paths though)\n- https://github.com/metabrainz/picard/pull/2135: Fixed problems with exiting the app, caused by https://github.com/metabrainz/picard/pull/2116\n- https://github.com/metabrainz/picard/pull/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\n- https://github.com/metabrainz/picard/pull/2137: Supported commands (like `QUIT` or `SHOW`) can be passed via CLI to an existing instance\n\n### Picard remote commands enhancements:\n- https://github.com/metabrainz/picard/pull/2141: `REMOVE_EMPTY` \u0026 `REMOVE_UNCLUSTERED` commands added\n- https://github.com/metabrainz/picard/pull/2142: `LOAD` command, extending the positional arguments' functionality, added\n- https://github.com/metabrainz/picard/pull/2143: `FROM_FILE` command, executing a command pipeline from a given file, added\n- https://github.com/metabrainz/picard/pull/2144: `CLEAR_LOGS` command added\n- https://github.com/metabrainz/picard/pull/2145: Fixed errors with the `FROM_FILE` command\n- https://github.com/metabrainz/picard/pull/2146: `WRITE_LOGS` command, allowing to save Picard logs into a file, added \n\n### Code refactoring:\n- https://github.com/metabrainz/picard/pull/2080: Code explicitly marked as deprecated got removed, my initial commit to get to know the Picard codebase and workflow\n- https://github.com/metabrainz/picard/pull/2127: Minor patch, unparsed args are now ignored as they were not used anywhere\n- https://github.com/metabrainz/picard/pull/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\n\n### Other:\n- https://github.com/metabrainz/picard/pull/2122 + https://github.com/metabrainz/picard/pull/2126: Github Actions gives quicker feedback by shortening the timeouts from 6 hours to 30 minutes\n- https://github.com/metabrainz/picard-docs/pull/174: Documented my changes\n\n## What I have learnt during GSoC 2022\n- How to work with other people on GitHub\n- How to improve my git experience (e.g. hooks)\n- How one can handle inter-process communication, basically I have researched:\n  - pipes\n  - **named pipes**\n  - sockets\n  - dbus\n- How to use Windows API with Python\n- Differences between Windows and Unix pipes\n- `\\0` is the only character that is prohibited on both Windows \u0026 Unix in path names\n- `/tmp` is not the recommended way to store non-persistent app data on *nix\n- `os._exit` might be useful when pythonic threads get broken\n- [Importing a tuple in Python](https://github.com/django/django/blob/main/django/contrib/auth/views.py#L12-L17) is underrated. `git diff` gets cleaner, as one sees only the additions\n\n## Some personal thoughts\n- 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)\n- Ultra-safety is a double-edged sword: good luck [terminating Pythonic futures/threads with file operations](https://github.com/skelly37/picard/blob/master/picard/util/pipe.py#L242-L244)\n- CI/CD and testing in general is as important as decent codebase\n- If one can plan their time well, flexible work hours make their work both more effective and more enjoyable\n- 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](https://www.mail-archive.com/python-bugs-list@python.org/msg280900.html))\n- 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 \u0026 exploring the functional programming, some statically-typed languages for bigger projects, games, research, etc.\n- Impostor syndrome is just an another excuse to procrastinate. Do not be scared to learn \u0026 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\n\n\n## Special thanks\nThe 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)\n\n- [atj](https://github.com/atj)\n- [phw](https://github.com/phw)\n- [rdswift](https://github.com/rdswift): You were so helpful I consider you my 3rd mentor here.\n- [zas](https://github.com/zas)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskelly37%2Fgsoc-2022","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskelly37%2Fgsoc-2022","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskelly37%2Fgsoc-2022/lists"}