Summary
Building and sustaining a healthy community requires a substantial amount of effort, especially online. The design and user experience of the digital space can impact the overall interactions of the participants and guide them toward respectful conversation. In this episode Rafał Pitoń shares his experience building the Misago platform for creating community forums. He explains his motivation for creating the project, the lessons he has learned in the process, and how it is being used by himself and others. This was a great conversation about how technology is just a means, and not the end in itself.
Announcements
- Hello and welcome to Podcast.__init__, the podcast about Python and the people who make it great.
- When you’re ready to launch your next app or want to try a project you hear about on the show, you’ll need somewhere to deploy it, so take a look at our friends over at Linode. With 200 Gbit/s private networking, scalable shared block storage, node balancers, and a 40 Gbit/s public network, all controlled by a brand new API you’ve got everything you need to scale up. And for your tasks that need fast computation, such as training machine learning models, they just launched dedicated CPU instances. Go to pythonpodcast.com/linode to get a $20 credit and launch a new server in under a minute. And don’t forget to thank them for their continued support of this show!
- You listen to this show to learn and stay up to date with the ways that Python is being used, including the latest in machine learning and data analysis. For even more opportunities to meet, listen, and learn from your peers you don’t want to miss out on this year’s conference season. We have partnered with organizations such as O’Reilly Media, Dataversity, Corinium Global Intelligence, and Data Council. Upcoming events include the combined events of the Data Architecture Summit and Graphorum, Data Council in Barcelona, and the Data Orchestration Summit. Go to pythonpodcast.com/conferences to learn more about these and other events, and take advantage of our partner discounts to save money when you register today.
- Your host as usual is Tobias Macey and today I’m interviewing Rafał Pitoń about Misago, a fully featured modern forum application that is fast, scalable, and responsive
Interview
- Introductions
- How did you get introduced to Python?
- Can you start by explaining what Misago is and your motivation for creating it?
- How does it compare to other modern forum options such as Discourse and Flarum?
- How did you generate and prioritize the set of features that you have implemented and what are the main capabilities that are still on your roadmap?
- Is Misago intended to be run in isolation, or does it allow for integrating into a larger Django project?
- Is there any support for multi-tenancy?
- How is Misago itself implemented and how has the architecture evolved since you first began working on it?
- If you were to start it today, what are some of the choices that you would make differently?
- What are the extension points that developers can hook into for adding custom functionality?
- In addition to the technical challenges, managing a forum involves a fair amount of social challenges. How does Misago help with management of a healthy community?
- How do different design elements factor into promoting healthy conversation and sustainable engagement?
- What are some of the aspects of community management and the accompanying platform features that enable them which aren’t initially obvious?
- For someone who wants to use Misago, what is involved in deploying and configuring it?
- What are some of the routine maintenance tasks that they should be aware of?
- What are some of the most interesting or unexpected ways that you have seen Misago used?
- What have you found to be the most interesting, unexpected, and challenging aspects of building and maintaining a forum platform?
- What do you have planned for the future of Misago?
Keep In Touch
- rafalp on GitHub
- @RafalPiton on Twitter
Closing Announcements
- Thank you for listening! Don’t forget to check out our other show, the Data Engineering Podcast for the latest on modern data management.
- Visit the site to subscribe to the show, sign up for the mailing list, and read the show notes.
- If you’ve learned something or tried out a project from the show then tell us about it! Email hosts@podcastinit.com) with your story.
- To help other people find the show please leave a review on iTunes and tell your friends and co-workers
- Join the community in the new Zulip chat workspace at pythonpodcast.com/chat
Picks
- Tobias
- Fear Innoculum by Tool
- Rafał
- github.com/encode
- Ariadne GraphQL Library
Links
- Misago
- Poland
- Mirumee
- PHP
- Discourse
- Flarum
- MySQL
- PostgreSQL
- jQuery
- DJango Rest Framework
- EmberJS
- MithrilJS
- AngularJS
- ReactJS
- PHPBB
- Celery
- GDPR == General Data Privacy Regulation
- Docker
- misago_docker
- VPS == Virtual Private Server
- Nginx
- Starlette Async API framework
- Ariadne GraphQL Library
The intro and outro music is from Requiem for a Fish The Freak Fandango Orchestra / CC BY-SA
Hello, and welcome to podcast dot in it, the podcast about Python and the people who make it great. When you're ready to launch your next app or want to try a project you hear about on the show, you'll need somewhere to deploy it. So take a look at our friends over at Linode. With 200 gigabit private networking, scalable shared block storage, node balancers, and a 40 gigabit public network, all controlled by a brand new API, you get everything you need to scale up. And for your tasks that need fast computation, such as training machine learning models and running your continuous integration, they just launched dedicated CPU instances. Go to Python podcast.com/linode.
That's l I n o d e today to get a $20 credit and launch a new server in under a minute. And don't forget to thank them for their continued support of this show. And you listen to this show to learn and stay up to date with the ways that Python is being used, including the latest in machine learning and data analysis. For even more opportunities to meet, listen, and learn from your peers, you don't want to miss out on this year's conference season. We have partnered with organizations such as O'Reilly Media, Dataversity, Corinium Global Intelligence, and Data Council.
Upcoming events include the O'Reilly AI Conference, the Strata Data Conference, the combined events of the Data Architecture Summit in Graphorum, and Data Council in Barcelona. Go to pythonpodcast.com/conferences today to learn more about these and other events and take advantage of our partner discounts when you register. Your host as usual is Tobias Macy. And today I'm interviewing Rafael Petunia about Misago, a fully featured modern forum application that is fast, scalable, and responsive.
[00:01:47] Unknown:
So can you start by introducing yourself? So hello, Tobias. Thanks for having me today. So my name is Rafal. I am Python developer from Poland. I also work at Mirumi. And for last, perhaps, decade or more, I was on and off maintaining form software, which Lattice is Lattice iteration is misago. And do you remember how you first got introduced to Python? That was around the Django 1 3 era or such. I was PHP developer before that, but I was growing increasingly, tired, and unhappy with the course that PHP was taking. So, basically, it was more like Java. It was be increasingly becoming more like Java, and I wasn't happy with that. And I started exploring alternative options.
I also had some run ins with the race community. And next on the list was Python in Django. So this is how I started in Django pretty much.
[00:02:41] Unknown:
And you mentioned that you've been working on forum software for about the past decade. I'm wondering if you can start a bit by talking about some of the different ways that that's manifested and some of the origin story of Misago
[00:02:56] Unknown:
and a bit about the project itself. Yes. So the origin story goes like this. Around decade or so ago, I was building a content management system in PHP, and 1 of the few features I had in it was Internet forum inside the admin panel. So the site manager slash owners could go to it and discuss different things about the site. And I was doing this together with few friends, and we have quickly noticed that doing this forum part is far more interesting and engaging to us than anything else. So we dropped the CMS part and decided to just iterate on the forum component. So that thing feels manifested as Callisto or something like that, I believe. And it was small PHP script with a lot of little features that we have copied from meeting forum software at the time. And it was quite scary, quickly growing in popularity in Polish PHP community.
But it become very quickly apparent that we really don't know how to write large or scalable applications. So so the idea was to rewrite it, and I was rewriting it, rewriting it, and some somewhere around this line, I decided to actually rewrite it in Python as a learning project for Python. And that was maybe 9 years ago or even 10. And after a year or so, I had the first version of Misago app, which I believe I shared in the the admin zone forums or search search community about Internet forums and communities. And since then, I was on and off 19, I keep pretty much myself from then on. And I'm wondering if you can talk a bit about the origin of the name because it's definitely something that I'm not familiar with. So So the origin of the name is actually quite stupid.
It was so there was this Internet multiplayer massive multiplayer online game that I was playing about spaceships. And my spaceship, this game was called Osprey, but Osprey was taken for domain name, so I translated it to Japanese. And that's how I came up with Misalvo. There's no second meaning behind that name. And so
[00:05:03] Unknown:
in in the current era of Internet use, forums have fallen off a bit in popularity, but they've been going through a bit of a resurgence in the form of projects such as Discourse and FlareM. I'm wondering if you can give a bit of comparison between Misago and some of the other projects that are available, and maybe talk a bit about some of the cases where having a forum is still useful and provides value.
[00:05:28] Unknown:
Okay. So I feel that the cooperation between Misango and those 2 in Mysago comes not that bad, actually. So the core forum package is here. So you can register users, they can discuss, and there are others extra fluff that you can't expect from modern discussion boards, like, I don't know, for post likes, follows, provide messages, and such. So feature wise, I will say that Misago compares nicely to those 2. So, obviously, the biggest difference between Misago and this course is that there is a company behind this course. Right? There's Jeff Hartwood and other his people from the Stack Overflow. There's also funding. They work in this full time.
And miss Agof, for most of time, was pretty much just me doing it on and off when I've had time when I had this scratch the stitch I had to scratch. And yeah. So so I feel that Misago perhaps lacks some polish compared to Discourse and Flarun, which obviously has much more iteration on how it looks, how it feels, how it's designed. And and I'm actually looking at both of those for some inspiration and ideas when I'm working on Mysago.
[00:06:39] Unknown:
And then in terms of the feature set that you have built into Misago, I'm wondering how you decided what features to incorporate and how to prioritize the development of them in terms of getting to a point where the forum is useful and
[00:06:58] Unknown:
usable for people who are interested in running it on their own? So 1 of the things that surprised me when I actually did internal had some experience working on the forms behind my back is that internal forum appears actually simpler as a core product to do than, say, content management system. A lot of people say that you should start maybe with block or something. And I have grown to say that after you do this block or static page or such, the next step should be simple Internet forum because it's very easy to implement, and it touches a lot of stuff that is useful in day to day work as application developer.
So to have the simple forum software, you need to get registrations, perhaps categories or not, ability to create a thread, and ability to post real responses to this thread. So that's pretty much a core package that I have set myself with in Mysago. But yeah. I answered running some Internet forums myself. I'm currently running, besides support forums, 1 more gaming discussion forum. So it becomes quicker apparent that other things becomes useful for such forum like ability to upload media to, say, screenshots or photos. The ability to like other users' content so they have very big feedback without having to post the new message that will send notifications.
So email notifications when you get responses is also something useful to people, perhaps less today when you have mobile devices and there are push push notifications coming up. And there is also the site owner side of the things. So, for example, you're owner of the Internet forum. You'll also like to have some convenience features, like, for example, if the user is that lets you see the route summary of your Glattest members. So you can see what the email address they registered from, how many posts they have posted so far, at which time they registered. A lot of features that landed in Misago are pretty much result of my experiences for my own Netherland and maintainer myself and also from feedback and issues that people are posting on Misago forums.
So for example, recent I have noticed that a lot of people that's setting up Misago have this problem with something as basic as uploading the logo image. So we recently had this I had this release that was focused on the such features. And now you can, for example, go to admin panel and upload the image that we launched in the forum navbar as your logo. So this is the process pretty much. I don't have some grand vision for forum or maybe a few years long ahead to the road map. I just look what people like, what people are using, what are the trends. I correlate them with what I have experienced in past, how I see our forms looking right now.
And that's pretty much primary process for deciding which features went in and which not.
[00:09:53] Unknown:
And for somebody who's running Misego, is it intended to be run entirely on its own as a separate instance that you would maybe incorporate as a subdomain to another project? Or does it allow for integrating in into
[00:10:14] Unknown:
quite a complex question, really. So, originally, I picked Django to build 2 minutes ago because it was pretty much only Python framework that look like that that fit the bill for me because it had the solution in the box for every problem that came to my mind when I was starting to work on it. And 1 of the ideas was that because it's on Django, it should be easy to integrate with other Django projects. So it very quickly became apparent that when you have lot of features that are specific to internal forum, A lot of those features are built on the user model, for example. And when you start customizing user model and the authentication flow, you very quickly burn the bridge that made it possible to use Mysago as Django app that you could just put to existing project.
For example, there is a Misango authentication backend that implements not just retrieval of the user from the database, but it also runs some of those checks so to see if your user is banned. And if they are banned, we also check if your permission set allows you to bypass the ban because, say, you're lot of little features like that coming in, and the results increasing number of complexity. And, eventually, Missago reached this point when I gave up on the hopes of his ever working because he joined a library. But so looking looking back for the to the disc course, they also had a very similar problem because they are building on rails.
And 1 of these major subject that was coming on the forums was, oh, but this is Reyes application, so I should be able to put it into my larger Reyes project. Right? And then so 1 of the ideas those guys came up with was that, obviously, we are a big project. We have a lot of feature base. We have a lot of dependencies that will probably conflict with your project and such. So we'll do something code agnostic, I would say. And Missago recently went in the same direction. So you already have the REST API that you could use as 1, the live for integration. And recently, we added Django single single simple single. So if you have existing site, you can just connect the Mysaggio in that matter by running it on separate instance, single subdomain, and there's a knob in admin panel that makes Misago delegate login features and registration to your first party site. So that's it's the same as 2 way to go about it. It also has benefits like I mentioned before. So For example, if I added some dependency, but you were dependent on previous version of the dependency, there is nothing wrong happening. And, also, if there is some vulnerability in missaggot, then it should stay in the inside the missaggot instance. So it won't leak out to your application.
So with those summary, I feel that this is good idea to go about and much better than trying to stay with stay compatible to the Django project. To stay compatible with Django as possible Django application.
[00:13:13] Unknown:
And is there any support built in or on the road map for multi tenancy in the event that somebody wants to run a single instance but use it for multiple different communities?
[00:13:23] Unknown:
This feature comes up once in a while. So there are usually 2 ideas about multitenancy that users bring up. So the first 1 is to have subject separation. So if you're looking again at real world example, the Blizzard has multitenancy on this course. They are running 1 community for World of Warcraft, the other for Diablo, other for Overwatch, and such and such. They are maintaining the subject's tenancy separation, and other popular multi tenancy approach is to have separation of the locales. So for example, we have 1 instance that is in English, another that is in German or in Polish, and some users can lock on both of those because the authentication is shared, but they are separating the content. So for you, the you avoid this weird this weird appearance when you go to the community page and you have the topic summary that just mixes Polish and Dutch or such.
So I've been thinking about this and, yeah, I made a decision that this will be quite a lot of work and it wouldn't be that much gain for the project at this time in its life. I feel that this will be something that mostly, like, bigger companies or or enterprise users would profit. And I don't think there are any of those in the Misago at the moment or even exploring it as option for their forums.
[00:14:45] Unknown:
And can you dig a bit more into how Misago itself is actually implemented and some of the ways that the architecture has evolved since you first began working on it? So Mistago started as a lot of small Django apps inside a single Django project.
[00:15:01] Unknown:
As I've been working on it, over a few months, I made decision that there's too much hopping between those apps. And I decided to refactor it into 1 big Django application that just had you know, you had just Misago on the installer tabs. There was this models package that had all the models, all the templates, all the views, all the forms, and this quickly became unmaintainable. So the next step was to actually revert back, but don't repeat the mistakes in the separation of the applications. And during this rewrite, I have landed with some applications that I am very happy how they came out because they are nice, neatly designed and focused on their thing. But there are, like, 2 applications that really grown out of the proportions.
Like, there is missago threads application that is threads, but also posting process, attachments, notifications, and such. And, likewise, the user's application has grown out. And I'm currently in the process of thinking how tools could be refactored further to make it better in the long run. So this was 1 of the evolution, the evolution of how the Python code worked. But there were also 2 other big changes that happened during the project lifetime. So the first that such big change was that Misago has moved from being MySQL only to being PostgreSQL only. Postgres had some features that I really wanted to try. This was also around this time when there was discussion about field text searching Postgres for Django. And I was also already in the middle of some other changes in refactoring in Simmsago. So this is when migration from MySQL to Postgres happened. And another large change or adding shift that happened during work on Missago was when I was increasingly adding the JavaScript bits to the interface.
At this time, missago was set of staging static pages. You went to the URL. You got the static page. And I was increasingly added interactivity that didn't require the full page reload. This was This was achieved by the jQuery, but I've quickly outgrown the jQuery for this project, and I started exploring different approach. And the first approach the first thing I did was to try with Django REST framework and Ember. Js frontend. So basically, what these guys did. But I quickly became unhappy with how Ember worked. So my next try was was to do what Flutter actually did. So I look at this. There was this very lightweight JavaScript framework, mittrijs, I believe. It's moved by x maintainer of Angular, 1 of the x developers for AngularJS.
I was, again, not happy with it, but in the opposite side. It was too low level for my happiness. So around 3 years back or so, I've moved front end interface to React. Js, and I've been happy with this approach since. But right now the another issue that came out with this is that Misago is using this it's so called how was it called? It's called hybrid approach, pretty much. This is what Twitter did for some time. I don't know if they are doing this today, but basically what hybrid approach is, user comes to that page, you render the static page, and then when JavaScript kicks in, it renders very much the same but with interactive logic.
So for example, disabled buttons become active buttons so you can click and do something with application. But this bites project back in the new unexpected way because a lot of people who come to Django So they they customize the templates to make the Misago look the way they want it to look. They then go to the Misago forum, and they see that the change appears. And as if later, it disappears because React kicked in the slide they weren't familiar with, and it overrides their customizations. So the next step for Misago Evolution here will be, obviously, to drop the Django templates and move as much UI to React components as possible. And, of course, because it's 2019, Missago has migration to Python 3 something behind it. I believe it migrated when there was Python 3 4 or 3 5. I was putting it away because I believe that, oh my god, this is going to change a lot.
But then suddenly, a guy from nowhere just came to my GitHub with pull request that made it all the Altice pass on the Python 3 6 or such. And really, I was super happy when this happened, and I also realized then that Minocio Gotchas, the immigration process from 2 to 3 was pretty smooth
[00:19:42] Unknown:
despite what I've been just hearing over the Internet prior to that. And if you were to start the whole project over today, do you think that there are any major elements that you would do differently or any different design or technical choices that you would make? Actually, yes. I've been thinking about this a lot recently.
[00:20:01] Unknown:
So I feel that 1 thing that Flaron did very right was decision to go focus on just the core forum experience and leave everything else with solid plug in system. So this is something that Mysago lacked for a long time. There's no easy plug in system where you could just add features. So this will be 1 of focus 1 of the things I would like to focus in next in next big release or search for Mistago. Maybe Mistago 20 or something like that. So this is 1 of things. And what else? So I will probably not implement some features in such a complex manner as I did before. Yes. For example, there is a very powerful and extensive permission system in Missago, and I liked it when I was implementing it. But in long run, it it really increased the time for the text to implement some features to miss. So because now you have, like, 10 or 15 features you need 10 or 15 permissions that you need to take account in when implementing this feature. So now that you need to account for them, you will also like to test them, and you will also like to account for them in the UI, which is React JS. So you have now 2 places to implement this. I will probably also go with the approach of headless back end where there's mostly API and perhaps single view that just renders the HTML template with JavaScript sources and maybe CSS, and do all the presentation layer in JavaScript framework instead of current hybrid approach. As a general, I would like to have the smaller feature base pretty much because yeah. So when I was working on Missago, I had a lot of time for Misago, so I could just put the crazy amount of time in in making some some extensive feature base. And in the long run, this turned out to be very time consuming to maintain. So for a longer run, I would like to start with something smaller perhaps and just stay to this core experience
[00:21:53] Unknown:
and leave everything else for the plug in authors. And in the tagline, you also mentioned that Misago is scalable and fast. I'm wondering how you have built it to allow for the speed element and along what axis it's scalable in terms of being able to increase
[00:22:12] Unknown:
the throughput that you're able to get for somebody who's using the forum. So nice thing about internal forum is that there are pretty much 2 or maybe 3 places where you have to optimize. So the first 1 is the is the index page, which is displayed at least of the threads or categories. So here you have 2 problems to solve. You need to select only threads that user have access to in some scalable performant way, potentially from set of millions of those. And you are doing correct tracking. So so you have this feature when user knows if they already saw this post or reply or not. This is another challenging feature that you need to optimize.
And the on the index page that is potentially harmful to the performance internal forum is the permission system. So when coming to those 3, Misago implements every trick in the book that Internet forum uses to this callable. So for example, I mentioned before that permission system is quite complex. So the trick to permission system is that you build the complete permission map for the user, and you cache it somewhere. You create the unique tag for the for this permission set that is not very specific to the user. It's specific to all the users with such group memberships or perhaps such roles. So now when 1 user comes to the forum, they perhaps have to slow down, but forum will build the permission set. And you will then reuse this permission set for all the next users coming to the forum in the same roles. And there's those are a lot of difference because when you have larger forums, you only need to reach to quite a few resources to build the complete permission sets. For example, you will need to iterate the categories because you will likely have the per category permissions. And there are forums that do this, like, say, PHP BB 3 did this perhaps first it was perhaps first or second forum that came up with this trick, and it was giving it a large boost of performance.
So the next trick next issue would be that you have this rate tracker system. So the simplest way around rate tracker system is to inhibit it to a certain period of time and assume that if something is older than this period of time, it's old. It's no longer new. Even if you never saw it, the form will show it as old to you. So this cuts down the amount of data you need to inspect into database to find out if user saw this content or not. And there's further further way to tune this approach is to select if you want to be post accurate or threat accurate.
So the threat accuracy means that forum will know when did you read last this thread last time. And when you go into this thread, you will see that post made past this thread date as read, not as net as new. And post made before this date are sold. So this is cheap. It's quite easy to implement. It's quite fast in the working, but it comes with some downsides. For example, if user edits the post that that you already saw, the thread accuracy will still show this thread as read to you. So you potentially miss this edit. And there is this post accuracy. So you basically don't use threads to see if thread if content is new, but instead you track this per individual post.
So this is a little more costly to implement, to work, but it's also quite performant because we are limiting the amount of period for which we are tracking this time. And this gives us the advantage that if user added some post that you already saw, we'll be able to notify you that, hey. This post changed. So there's another risk. And as for paginate, as for listing the threads, so the first thread list was actually a major slog in Misago for quite some time. So I've developed a set of test data generators, and I was generating, like, hundreds of thousands of forum threads for my test instance and looking how how long it takes to display this thread series, how long it takes to go to the next page or previous page for different users with different permission sets, and I was not too happy with it. But, apparently, if you turn it to the car set pagination, it just scales itself. I was actually surprised how much I gained simply by removing the Django offset pagination from the threads list and moving to the cursor based pagination.
So this is another optimization that misdiagnosed on the main page. And on the thread page so there are probably maybe 1 thing that you can redo on the thread page that really matters from the forum performance, and that's pre parsing the content of the messages. So when users post this message, you parse it at the post time, and you save it into database both as original markup and then also as parsed HTML, and you display this HTML. But there's a here that yes. So when your form is compromised and people will just inject the email issues HTML into this post, you'll get some very not good attack on your form. So the common addition is that in addition to string this HTML, you also add some sort of signature or check that is specific to this content for this post ID. And you only display this HTML if the signature checks. So it's not super so there is still smart performance loss involved, but it's still massive gain of performance because message parsers can be considerably slow and heavy on resources.
And in those and today, there is another approach appearing where you just store the JSON of what user entered into a dtor. So, basically, this is called what you see is what you mean approach for editors, where editor doesn't emit HTML or raw markup. Instead, they emit this JSON. So just store this JSON into database, and you format it using React component on client side pretty much. But you will still probably want to pre parse it for server side rendering for maybe c or crawlers or such. So those are 2 things that so those are things that Misago does to be performant. And recently, we also introduced the Celery to the Misago.
So we started uploading some extra work to the to the worker threads. Like, for example, when you post a response, we are able to send the task to Celery that they should email notifications away. So we don't do this on HTTP.
[00:28:55] Unknown:
And then in addition to the technical challenges and complexities of building a forum, There's also the people aspects and social aspects of managing the forum itself, and I'm wondering how Misago helps with that aspect of it in terms of feature sets and design elements that, contribute to a sustainable and healthy environment for the people who are using the forum?
[00:29:23] Unknown:
Yes. So first lesson you learn when you start trying to regulate your forum using technical means is that life will find the way around it. So if you try to impose technical regulations, some people will just go, okay. This is how this form is set up. But a lot of people will ultimately give you a feedback. They demand or expect this to be changed or reconfigured because it currently permit prohibiting it from doing something. So you very quickly learn that a lot of this stuff is very difficult problem, not soft no software problem or not technological problem.
This is also we try harder thing to get with the form software Because unlike, I don't know, question and answer software, there is no clear win condition or what the community is really about. Because, yeah, on question and answer, there's there's good answer or perhaps good feedback to the question. But what can be a healthy community criteria or win condition for Internet for where they are? I don't know. Posting funny situations from the computer game, they had experience or such. So so most of this will be human problem, and I found that it's best live left to humans pretty much Because I know that there are tries from, say, actual yeah.
So there are tries, like, where it has this reputation system, but it's also only as good as the Superdition Managers are are what the norms that company community impose on the Superdition for themselves. So the pretty much the best you can do is to give forum owners the moderation tools so they are able to react quickly, so perhaps reporting. So users can just report or flag some content as a as a or something that should be taken care of by the form owners and also the moderation tools that actually let you get it to rather, say, hide some posts or alter altogether delete them.
Perhaps even perhaps features like, I don't know, tracking infractions on the user profiles and such, but these are remedies for when situation already happened, really. It's very tricky. So get the to intercept or prevent this on with technical solutions. I know that this course has this trust levels feature for users where they are enabling some features on or things as you stay active on the community for longer periods of time. But I've noticed that bunch of client is just disabled altogether because it's more annoying to their users than really helping them. Yeah. I guess people are hard. Yeah. They definitely are.
[00:32:34] Unknown:
And in terms of your experience of building the forum software and using it for trying to grow and maintain a healthy community. I'm curious, what are some of the aspects of community management and the necessary platform features that enable them that weren't initially obvious that you just discovered through the virtue of having to go through it? So 1 unobvious thing that I have run into is that you will get
[00:33:03] Unknown:
very useless search engine when you will fit the search engine with the user generated content. So for example, you can have technical discussion board. And while the user will write Apple phone, another user will write iPhone. And for search engine, those are 2 different concepts. And then you will get users coming back to you or coming at each other that this was asked in different thread. But they just use this synonym that search engine didn't recognize, and And then you get this feedback that the search is useless on forum. And you should probably change the forum software to something better. This is 1 of the challenges I found. And, actually, in Misago, you have this feature where you can create the list of replacements. So before a message goes into the search engine to be indexed indexed or queried, you can normalize some phrases. So for example, you can replace common synonyms or such.
This is 1 of the mechanisms that Mistago implements. And there are also some features that can terribly backfire at you. For example, like, a year ago, we have introduced the GDPR compliance features. So we allow you to delight your account if you don't feel you want to share your data with the forum anymore. And what really happens is that when some people are angry, they just burn the bridge behind them. So they just go to the panel and go, I want to delete my account now, please. And sometimes, those are very valuable users and members of the community who do that simply because they had this combination of frustrating single experience on community, paired with perhaps something frustrate something frustrating in real life going home for them. And, well, another observation I had is that people would love to gamification different met word metrics. Like, the post count is most obvious 1, and it was Game Boot, like, forever. But in past, Misago had pretty much verbatim read its upvotes and downvotes.
And for a lot of Internet forum communities, the result was that if somebody got downvote, they became angry, especially if you enable the option for them to see who downvoted their post. They would just jump at each other, and they argue about who was actually right, or how they were misunderstood, and such. I also saw 1 situation when there was a secret category where people from the forum team were simply posting messages and upvoting each other messages. So they had very high public karma appear on their forum. Yeah. So so this is what made me actually to drop the down votes feature from the rest 1 of recent Misago versions and replace
[00:35:38] Unknown:
the remaining upvote we just post like. Yeah. It's always interesting seeing the ways that people will try to manipulate any system for their own purposes even if those purposes might seem to be completely inconsequential.
[00:35:53] Unknown:
Yeah. It's like there's popular forum game where people just count to million or something like that, where everybody just posted their number n plus 1 to the previous post, and they are clocking their post count like that. And then for somebody who wants to
[00:36:08] Unknown:
deploy MISO Go for their own communities and use it, I'm wondering what's involved in getting it deployed and configured, and some of the routine maintenance tasks that they should be aware of that they'll have to
[00:36:21] Unknown:
run through to keep the forum running and healthy? It's actually 1 of my favorite subjects. So when I originally was Munich a few weeks ago, my assumption was that because it's on Django, every Python dev will know how to deploy Django. And I was very wrong about that 1. Because to deploy Django app, you will need to set up a lot of around things around it, and people just didn't know about it. Or they were trying to do various things like they deployed it, but they they then they backed up the all the files they had on the servers with, say, virtual lines included. They will upload those files in different location, the new server, and it don't crash and didn't work anymore. And that was very hard for the Python developers, I've learned, And it was absolute no starter for people outside Python. So I was looking for some solution for quite some time, and, eventually, I decided to settle on Docker as the only way to deploy the Mysago. I was contemplating other ways, but due to time constraints, I decided to just limit myself to only 1 right way to deploy missago. And where we are now is we have this repo called missago slash missago common. Missago dash docker. It's complete to repo with complete setup that you just git clone to your VPS. And there's step by step guide how to set up your VPS for this forum to run. And it takes maybe 15 minutes to get your forum up and running for production, complete with NGINX, with HTTPS, static media serving, logging, daily backup, and Chrometasks.
And I'm really happy how this came out. I guess, I've been receiving, and I still do receive sometimes, feedback that that Docker is no starter for people. I found out that Docker is very polarizing even today for people who are deploying web apps, but it allows me to just have this repetitive no. This reproductive deployment process. And after I've introduced the Misago Docker together with this guy, this guy is actually not just Misago Focus, but we show you which Docker which image which which droplet image to pick on DigitalOcean, how to connect the domain to it, what commands to run after you access your droplet, everything right next. And this guide goes from pretty much this digital ocean panel all the way to the missile gaming panel. It takes, like, 15 minutes to complete. And since we introduced this into the project, the number of Misago installations started climbing steadily.
So this was a major win. And it's also something that come up in the user feedback. Oh, they wanted Python forum, but Misago was only forum in Python that they managed to set up themselves. Oh, they like the Misago, and they are happy it was so easy to set up. And as for maintenance, this repo set tool implement includes set of bash scripts that you can just run to create backups, to restore previous backups, and also single update command that you can run, and it will pull Lattice Misago code from GitHub, update everything for you, backup it before the update, of course, pull the Lattice code from git, and in a few minutes, you'll be running the Lattice instance of Misago. So other than having to remember that you should actually take care of
[00:39:35] Unknown:
updating your form once in a while to have the latest security features and such, This is the cache setup. And in terms of people who are using it, what have you found to be some of the most interesting or unexpected ways that they have employed it for their own purposes?
[00:39:50] Unknown:
There are actually 2 things 2 situation that stand out to me. So first 1 was that somebody took Mysago, removed the registration features, the posting features, pretty much everything but the basic code to power the interface, and they turned the back end logic to just feed Misago's database. I I don't know how they really went about it, But Misago has just used a thread only interface for some mailing list. So they were just presenting their mailing list using Misago's web interface for those who didn't like to use the main client. Basically, sophisticated Python mails. And the other 1 that surprised me was somebody used misago to run the SEO farm or content farm.
So it was basically a fake forum with fake users, and these users were posting what I believe were they were scraping from Stack Exchange or search. It had a lot of contents, and I was happy that it ran very smoothly for this amount of content they just managed to scrap. But they were ending it because they they felt they want to run the mirror for the StackExchange, exchange, obviously. So they quickly started sneaking in some SEO backlinks to some shady web pages from that page from their misago instance. But but, happily, they decided to drop their operations sometime ago. Yeah. That's 1 of the,
[00:41:09] Unknown:
hazards of putting software out into the world is that anybody can use it, but the the the benefit is anyone can use it, but the problem is also that anybody can use it. So it's it's good that they at least, shut it down. Yeah. And you don't know what they will use it for. Right? Exactly. And what have you found to be some of the most interesting or unexpected challenging aspects of building and maintaining a forum platform and some of the pleasant experiences that you've had as a result? So 1 of the things that keep coming up when you are working Internet far platform is that it's
[00:41:40] Unknown:
super singly human focused and human dependent. There is no obvious KPIs or use cases that you can implement in technical way or somehow regulate or or optimize using your using technical process. It's it all sits down to the users or how they interact with each other and how they actually build their relations in your communities. But I actually liked when I sometimes go to the forum, and it's actually running for Misago, and I see those guys discussing with each other. I made this possible for them. I don't even know I exist probably, but it makes me feel environment issues inside. So this is the part the most satisfying part for me probably do Internet far platform. And yeah. So 1 of the cruisities I I like to observe and it comes again and again and again is that for some forum owners, the forum is very social thing. And for some forum owners, probably those less successful, the forum is just piece of technology that they can use and offload their problems too. So so this is the kind of forum owner that will come back to you and say things like, if post has, you know, if has maybe 200 replays, it should be closed automatically because the users are posting very long discussions on forum that they are and to what's the problem actually? They are enjoying themselves? This is what you want to have with Interform. Right?
To encourage the interaction between your users. But for yes. There is some weird weird inter interpretation what Interform forum should do for those people. And those people ultimately come back to you, and they ask you for the solutions. And I I was actually very much in the later camp of trying to use the technology for solving the problem foreign problems. But the more I was running communities, the more I was participating communities myself, the more I believe that the good software should be the software that that is transparent to the discussion where this where how community is, how they are interacting with others, it all comes from human yourselves, pretty much.
How they send the nouns from themselves and not how the software enforces those nouns. But this is also just like on subreddits. There are good subreddits, and there are very spammy subreddits where they are just raising the karma, posting jokes. And there are also subreddits that have these quality discussions. So you can land with 801 using Wizago, but it's it's up to you how you will relate your community to go further. And there's in very good software can do to actually help you achieve the quiet discussion instead of, say, the spammy, memetic discussion that you probably would like to avoid, or maybe not if you're running the gaming forum. And what do you have planned for the future of the Misego project?
Yes. So in the closest future, my plan is to plow through the backlog of small and easy victories that I was always putting aside because there was bigger fish to fry. But I'm actually currently going through those. Improvements, I I'm actually surprised because those data improvements are winning in the more with software users than those previous big features that I was hoping to achieve with. So for example, there are smart improvements like this ability to upload custom logo image before. We also now allow you to upload the CSS files from admin panel. So if you want to change the colors of your forum, you can now do it without having to learn how to override CSS files in Django.
I have a backlog of such small improvements that I'm slowly making my way through. There are probably 2 or 3 things left. So I was really happy because 1 of the results of those small wins was that for, like, first time in those years of history, there are contributors to the project that, like, come in and contribute some valuable stuff to the project. So previous release was the features release in a long time besides this Python 3 release where the features in release were contribution. There was I my con my participation in this release was pretty much to just clean up some things, write release notes, and ship it to the users.
And, currently, it will be the same because there will be release that adds option for you to customize the menu items from admin panel. So there's another use case that I felt that probably people would like to customize templates, but they just want to have text boxes in admin panel. Even even if your user is a Python developer, Python Django hacker, you can't assume and you shouldn't assume that they will that fiddling and hacking around your forum will be what they actually want to do at the moment. Perhaps they just want to have the discussion platform real fast. So this is what I'm working on in the immediate future, improving the I'm making more of the small wins for for the visibility for site owners and per hub, and that's what the I didn't know. And, also, making small improvements to the user interface.
And in the long run, I am researching move away from the Django to perhaps store it. I would like Misago to yes. I would like Misago to be the small thing as I said, and I feel that probably the sanest way about it would be to just start from scratch and have this trans intermediate period where I am maintaining the current big featured misago. But in sort of 80, 20% project, I am also experimenting on new feature version of Mysago that is just full rewrite with some features ported, bunch of features dropped, and this full rewrite is being done using. So it's not 100% async. It's also used as aria nest, so it's GraphQL first. And because it's GraphQL, it also makes it very easy to build the user interface using modern React JS. So this will I would like to end maybe few years from now with Mysaga that is very Polish and focused forum package that you can just extend to your and customize your liking using the LTE and custom visibility features or by powerful plug ins system. So cut it to your the size you want.
[00:47:49] Unknown:
And are there any other aspects of the work that you're doing on Misego
[00:47:53] Unknown:
or building and managing communities through forum software that we didn't discuss yet that you'd like to cover before we close out the show? Yeah. So before we started, we met you mentioned that there is sort of renaissance for Internet forum. So I also see this. So, basically, people started noticing that as the reach of portals and large community sites like Facebook is growing, there's increasing a number of people who'd like to come participate with communities outside of the site. And there's also increasing number of the companies that learn that when they build community on, say, Facebook, they don't really own this community. This community belongs to Facebook. They are only leasing you the space so you can run. Because there are companies like gaming companies that like sometimes to do things because they perhaps they're doing the adult oriented games with major content. And there were already situations when some game developer placed some game trailer that was l rated or maturated, and they were slashed from the social side for violating the social standards as such.
And those developers usually find the safe refuge honoring their own gaming discussion on their own forums. So this is actually the niche that Internet forums are still tripping with, And I believe it will trive for a long time. Even if the main consumer change from desktop computer tools to mobile devices. There will be some interest for Internet forms for those mobile devices.
[00:49:15] Unknown:
Well, for anybody who wants to keep in touch with you and follow along with the work that you're doing, I'll have you add your preferred contact information to the show notes. And so with that, I'll move us into the picks. And this week, I'm going to choose a new album by a band, TOOL, who I've picked previously called Fear Inoculum. And it's been about 13 years since their last release, so it's great to see them finally putting out something new. And, also, they happened to finally release their catalog on different streaming services as well, so it's easier to gain access to it. So definitely recommend that album for anybody who's interested in finding out what tool's been up to. And so with that, I'll pass it to you, Rafael. Do you have any picks this week? So I have 2 picks for this week. So first 1 is if you go to GitHub
[00:49:59] Unknown:
slash encode, this is the project or initiative that Tom Christie, creator of Django Rest framework, is leading. And the idea behind it is to build the 100% asynchronous ecosystem of Python libraries for writing web applications. And this human just task, and you have spare time, and you would like to help out with it and contribute to open source, especially now when the Hacktoberfest is around the corner. And I would like to ask you to drop by and look what where you can help. And my second pick is that beside Misaga, I'm a solo developer for Ariana GraphQL, and it's Python library for writing GraphQL servers using schema first approach. So this is this approach where you are just describing this GraphQL schema using GraphQL specific language and use a little bit of Python to connect your business logic to the schema. And we have recently passed the half 1000 stars, so a hundred something we are in now. I'm really happy that project is growing, and I would like to invite everybody to find the device themselves with it if they haven't already because I feel that GraphQL is, the next big thing for web development as a whole, while the Python async is the next big thing for Python development.
[00:51:15] Unknown:
So those are my picks for this week. Well, thank you very much for taking the time today to join me and discuss the work that you've been doing with Misego and your experience of building and running communities forums. It's definitely an interesting space and 1 that, as we've discussed, is starting to go through a bit of a renaissance. So I appreciate all of your efforts on that front, and I hope you enjoy the rest of your day. Thank you for inviting me, and have a good day too. Thank you for listening. Don't forget to check out our other show, the Data Engineering podcast at data engineering podcast dot com for the latest on modern data management. And visit the site of python podcast.com to subscribe to the show, sign up for the mailing list, and read the show notes.
And if you've learned something or tried out a project from the show, then tell us about it. Email host at podcastinit.com with your story. To help other people find the show, please please leave a review on Itunes and tell your friends and coworkers.
Introduction and Sponsor Message
Interview with Rafael Petunia
Rafael's Introduction to Python
Origin Story of Misago
Comparison with Other Forum Software
Feature Set and Development Prioritization
Integration and Multi-Tenancy
Implementation and Architecture Evolution
Design Choices and Future Plans
Scalability and Performance
Social and Community Management Features
Deployment and Maintenance
Interesting Use Cases
Challenges and Rewards of Building Forum Software
Future Plans for Misago
Renaissance of Internet Forums
Picks and Recommendations
Closing Remarks