MediaGoblin 0.9.0: The Three Goblineers

MediaGoblin 0.9.0: The Three Goblineers
"The Three Goblineers" by Christopher Allan Webber (pen and ink) and Morgan Lemmer-Webber (colored pencils). Licensed under CC BY-SA 4.0.

This release is called The Three Goblineers, because we are finally fully embracing Python 3! You could even think of this release as Py-oneering, which it definitely is. Many traditional web service tools are less-than-ideal for federation and so we've had to do a lot of rebuilding and retooling. This release represents lots of intense behind the scenes work to make the user experience smoother, as well as some key improvements for MediaGoblin developers and deployers.

Federated services use databases in a some fundamentally different ways. We had to make a traditional (rigid) database more friendly for more flexible relationships. The result is similar to the generic foreign key implementation used by Django, but optimized especially for federation. Jessica Tallon did the lion's share of this work and was aided by Andrew Browning who did extensive testing.

We also updated how we handle comments and media collections. On a multi-media service, people will naturally want to reply to comments with videos and to ASCII art with songs so we had to make our commenting function support all the available media types. Also, the media collections aren't just for your personal gallery anymore; they're also used now in federation and the API as the backbone of a user's "inbox" and "outbox" feeds. Also, to make life easier on those uploading whole albums of content, if your user has some collections available, these will be presented as a dropdown option while submitting media.

Selecting a collection during submit

In the less visible but equally important department, we updated OAuth and created a "graveyard" system. We updated our code to make better and more secure use of OAuth so that my server and your server can be really sure we are actually talking to each other. The "graveyard" system uses tombstone icons to let you know that an object was removed by it's original poster. This makes it easy for users to remove media they no longer want to share, while creating as little confusion as possible for other users.

              *                      *
 *                      *                  _.     *
      *           *          *            <  '.
             *                             )  )       *
                                    *     <_.'   *
    *      *        .-------------.
                  .'               '.                *
       *          |                 |   *
                  |   TOMB OF THE   |       *
            *     |     UNKNOWN     |            *
   *              | ACTIVITYSTREAMS |
                  |     OBJECT      |
             .^.  |                 |
  _  .+.  _  |~|  |    ????-????    |  .+. .-.  _  .-.
 | | |~| |=| | |  |                 |  |=| |~| | | |"|
``'`'`''``'`'`'`'``'``'`'`''``'`'`'`'``'`''``''``'`'`''

Developers will be happy to know that we are keeping pace with the larger Python community and now have complete support for Python 3. We had early and experimental Python 3 support in 0.8.0 but couldn't quite recommend it for production use. That work is finished! Now you can choose to hack in Python 3 or Python 2 and your code will be totally compatible with the main codebase. Since Python 2 won't be supported forever, Python 3 is the future. And we are all about the future.

We also switched our migration system over to Alembic. Previously, we'd been using sqlalchemy-migrate, but it also wasn't as good for updating the database layout when you upgrade, and lots of dragons be there. We think Alembic will make it less terrifying to update your MediaGoblin instance so you can stay current and without spending lots of time trying to sort what happened in the database. Alembic is also newer, fresher and better maintained!

Another thing that makes updating a little persnickety is finding out that the dependencies have changed. We are collaborating and experimenting with the Guix community to fix this issue. Cleaner packaging will help people upgrade without fear, using deployments they can trust. Watch this space for a future post on how to use Guix and MediaGoblin together for worry-free upgrades.

For users upgrading from previous versions, as always, check the release notes for instructions on upgrading!

Our work to overthrow the red eminence of the centralized web continues! Between Python 3 support and laying down foundational changes to support federation, this release brings us much, much closer to our long term goals! Thanks to all our Goblineers and Py-oneers without whom this work would not be possible! Give a round of applause to Andrew Browning, Ben Sturmfels, Berker Peksag, Boris Bobrov, Christopher Allan Webber, Daniel Krol, Deb Nicholson, Duncan, jerome, Jessica Tallon, Loic Dachary, Sebastian Spaeth, Tom Fay, and 宋文武! You all helped make it happen!

And if you want to make it happen in our next exciting release, we'd love to have you get involved! Visit us in IRC; #mediagoblin on freenode.net! Or sign up for regular updates on our mailing list. Got ideas or questions about our work? Email us at press@mediagoblin.org -- we look forward to hearing from you!