Building a better Goodreads with ActivityPub
At the Virtual ActivityPub Conference of 2020 Nilesh gave a talk that got my attention called Building a better Goodreads with ActivityPub. I was interested in this because I have a Goodreads account, which I am reasonably happy with, but I wanted to see the alternative. And one reason to look around is that Goodreads is now owned by Amazon, which fact alone is sufficient to raise questions.
For those who have never explored it, Goodreads is a kind of social platform for book lovers. You “friend” people there just like on any other platform, and you get updates on what they are reading and what they thought of the book, and you can easily add an item you see from a friend to your “Want to read” list. But what I found most attractive for my needs is that it works as an inventory system. I have a few thousand books, some physical, but the majority e-books, and they are all over the place. I do own a Kindle, and have a lot of Kindle books, but I once had a Nook and have books on that platform. And I have bought books on the Kobo platform as well. And I have a number of books that I bought from Kickstarter campaigns, from friends who are authors like Michael W. Lucas, and so on that are mostly in PDF format and sit on my hard drive. As you can see, I had a real problem in trying to keep track of where everything was, so I needed good inventory system.
Goodreads gave me that very nicely in a platform that was online and accessible from any Internet-connected device. I could add tags to any book entry (Goodreads calls them shelves, but they are tags), I could write a review of any book I had read (which would be seen by any friends I had connected to), and I could also easily post the review to my blog site. By creating my own tags I could record where the book resided, thus solving my inventory problem. And since it was owned by Amazon, there is a even a very simple way to add any Kindle books to your collection. So I have really liked what it does for me. Still, I like Federated media a lot, so I had to see what the alternative might be like.
Nilesh’s Alternative
Nilesh starts by pointing out the many shortcomings of Goodreads, starting with the Search function. If you review a book, the review is tied to the edition, which means that if you reviewed the paperback, someone looking for a review of the hardcover won’t find it. Many Goodreads users have complained about this, but apparently Amazon does not care. Nilesh went looking for alternatives, and found OpenLibrary.org, a project of the Internet Archive. OpenLibrary was created by Aaron Swartz, Brewster Kahle, Alexis Rossi, Anand Chitipothu, and Rebecca Malamud, and you have probably heard some of those names before. The idea is to create a web page for every book ever published. They also have been making books available for borrowing, but were recently sued by the publishers, which was in the news so I am guessing you have heard of it. Trivesh liked what they do, but it wasn’t what he wanted to do.
Nilesh thought about it and decided that reading, per se, was not what he was most interested in. He was interested in learning, and saw that he used a variety of resources and media formats to do that, which could include web sites, apps, videos, and so on. This immediately made me think of the variety of tools I use to study Spanish (see https://www.palain.com/im-learning-spanish/), so I got his point right away. So what Trivesh described as his ideal was a social network of lifelong learners. The problem would then transform into how to match the right learning resource to the right person. So he has set out to build LearnAwesome.org, which he defines as a combination of Goodreads, ActivityPub, and a Learning Map. It is of course an open source project, and would love contributions. You can find it at https://github.com/learn-awesome.
The model he is working with (and please watch the video if you are interested, there is more there than this review can cover) is that you have a topic. Each topic can have up to two parent topics (in his example, machine learning would have both computer science and mathematics as parent topics). Each topic then generates an idea set, and there are also experts linked to the idea set. For each idea set you get items, and for any item you can have reviews, and so on.
The ActivityPub component lets you follow people and get updates in your Mastodon feed, for example. So just like Goodreads send me e-mails when any of my friends reviews a book or adds a Want to read listing, I could get something similar in Mastodon, or indeed in any ActivityPub-implementing application.
But what really makes this interesting is that the search feature is much better than Goodreads. Trivesh does a demo in the video which illustrates what he can do. For example, he can search for podcasts about programming, and find all of the recommended podcasts, see who reviewed them and what they had to say. Or take a topic and see what see what resources they have. Since this is all open, the idea is that the members contribute the content. So as an example, I created an account and logged in, and decided to look at Languages as a topic. There were a number of languages listed, but Spanish was not one of them. So I decided to create an item to get the Spanish part going, and I picked the Coffee Break Spanish YouTube videos for my first item. I will probably add some more items to help flesh this out. Right now the topics are more heavily weighted towards the computer science topics, which no doubt reflects the interests of the initial users. I did encounter one glitch which generated a server error on my first attempt at posting a review, so I got cautious and wrote it in a text editor the second time and pasted it in, which worked perfectly. I noted that in addition to your public review you can also add some private notes to the item, though I could not think of a reason to do that in this case.
LearnAwesome also has a browser extension that lets you add a flash card for any item you find on the Web. And there is a Slackbot that is integrated if you need one.
It is early days still, the project has only been in existence since June 2019, but it already looks pretty interesting and has a lot of features. One of the next goals is to get to the point where you can generate a syllabus on a given topic that is personalized. The example given was that you get a sequence like:
- First, read this article
- Then, watch this video
- Then try this exercise on this platform
- Then follow this set of users
Incorporating ActivityPub
As we mentioned, this does let you get notifications on Mastodon, but there is so much more. The ActivityPub model lets you define:
- Objects – Books, videos, web sites,
- Actors – persons, companies, services
- Activities – Likes, reviews, posting a message
- Collections – Followers, users
From here Nilesh gets into the technical details of how the appropriate messages are structured and sent, but I am not a programmer, so I will simply refer you to the video if you want to see those details.
The big missing piece right now is that it is not truly a Federated application yet, but it looked to me like Nilesh knows this is a problem to be solved. But even without the Federated component, I found this application very interesting.