Jonathan: This is Floss Weekly, episode 773, recorded Wednesday, March 6th. NodeBB, don't do the math.
Hey, this week we talk with Julian Lamb about NodeBB. It's open source forum software that brings the idea of the forum into the modern age. There's some neat tricks it knows, like forking forum threads, talking on the Fediverse, and more. Hey, it's a great interview, you don't want to miss it, so stay tuned.
Hey, hello, it is time for Floss Weekly. Weekly, that's a show about free Libre and open source software. I am your host, Jonathan Bennett, and I've got Jeff Massey with me today. The one, the only welcome, sir. Oh, good to
Jeff: be here. Always, always love a crossover episode.
Jonathan: Yes. I, I love having one more co host that has some availability to help with the juggling.
So I appreciate that. Well, today we're talking about, we're talking about Node BB, which is Bulletin, not really bulletin board, but I believe it stands for bulletin board. Uh, software, so it's forum software that runs on top of node. js, which I kind of got started with the, the whole PHP side of things. So sometimes when I hear node.
js, I'm like, uh, we'll try not to hold that against the project. And hopefully we'll get into that. Maybe, maybe Julie and Lam, our guest can convert us over to being lovers of node. What do you know about the project, Jeff? Uh, just
Jeff: that it's forum software, you know, it's funny. You said BB bulletin board. I always think back in the Fido net days and the old dial in.
And, you know, when I think bulletin board, so. You know, I'm, I'm looking forward to see what, uh, what's in store for us to, to learn all about it.
Jonathan: Yeah, you know, there's, there's some of those, those old pieces of software that are kind of experiencing, experiencing a resurgence, um, between multi user dungeons and bulletin boards.
There are some that you can still dial into, either actually dial in or kind of do a virtual dial, dial in. So people are still interested in. And kind of that throwback. I don't know if, if we would consider forums to be sort of a throwback technology in the same way, definitely not as old. Um, but I mean everything's, everything's on Discord and Slack now, right?
Everybody's gone to Teams and Google Chat, and why do we need forums still? Well, no, I'm not being very serious, I still like forums. Although my, my experience with forums, really, I think of, uh, what is it? The simple machines forum from PHP. That's the one that I'm used to. Um, well, let's go ahead and not, uh, let's not dive down this, this particular well any longer.
Let's bring Julian on. Hey, sir, welcome to the show and let's chat about. About node BB. What did we get wrong? How terrible were we at our guess at an intro?
Julian: Well, first off, thank you for having me. I'm happy to join. Yeah So, forum software, and specifically bulletin board systems, uh, you mentioned BBSs, and I'm actually, uh, not from that era, I haven't actually used any of the old, and you mentioned throwback BBSs, those, um, older, old school bulletin board systems, but I sort of cut my teeth on, you know, those simple machines forum, PHP, BB, uh, VBulletin, and the like.
Right, right. And, um, You know, those things, those old forum stacks have aged fairly poorly, you know, the most of them are about 20 years old, and It occurs to me now that I used to say that they are 10 plus years old, but at this point we are 10 plus years old So I guess that makes us old too.
Jonathan: Oh say it ain't so Never never do the math.
Never. Yeah,
Julian: exactly Um, yes, we're based off of node. js um, which is Which at the time, 10 years ago or so, it was fairly new and modern and was very enticing for a lot of reasons. Not only because of the asynchronous, um, mess, uh, asynchronous flow of, um, and so you're not, you're not blocked by any sort of network calls and that sort of thing.
So in terms of scalability, we had, we saw some early gains there over PHP, but at the, the downside being it's not exactly Easy to install. It's not like you can just upload a script to a web host and you can get a forum going. Yes. Some trade offs
Jonathan: there. Yeah, that, honestly, that's probably the thing that makes it the most challenging.
Like that's, that's maybe the thing that annoys me the most about a Node. js project is it's not easy to install and it's not necessarily easy to integrate into something else, you know? So if you've got, if you've got a PHP based website, you can't just drop an Like you said, you can't just drop a script in there.
You can't just make a PHP file and go on. But at the same time, so I've, I've, I've, I've programmed in PHP. I've programmed in JavaScript. I've done Flask applications where you have Python as the back end and I can, I can definitely see the appeal to being able to just write JavaScript. Like, for all of its warts, JavaScript is kind of fun and easy to work with.
So I can, I could see the point of, let's just make, let's just do everything with JavaScript.
Julian: Yeah, I will admit the fact that we could sort of hit the ground running with JavaScript, you know, with all of its warts, uh, was very enticing as well. And so, You know, we decided to take the whole concept of forum software and bring it to the modern age.
So the modern web stack, latest web standards that bring the UI up to the expectations for modern web allocation. Something as simple as, uh, mobile responsiveness. You know, a lot of those old forums you can't use on your phone. Or you'll load it and then the text will be about two pixels high. And you have to, uh, pan and zoom.
Let's see
Jonathan: here. Yes, yes. Yeah,
Julian: so, you know, we've all had those experiences. We should have left those behind. And, you know, NodeBB likes to offer that sort of mobile, fully responsive, you can use it from, you can use it on a Nintendo DS if you like, uh, up to the largest, you know, big screens in the stadiums.
Not that you would, but you could. And, uh, you know, but then Forum software has got a lot of things right from back in the day, you know. The whole concept of extensibility. Plugins and themes that you don't get nowadays, you know. Um, You, you have, you can install plugins and there are APIs for things like Discord.
Which is fantastic. Uh, there was a time when we were talking about incumbent social media where you just couldn't. You know, you were stuck with. Facebook's interface, for example, right? And you couldn't really customize it. I'm not advocating that we go back to MySpace, where every individual person just has their own HTML laden profile page, but you know, somewhere and somewhere in between.
Yeah, you can find a
Jonathan: happy medium. Well, I mean there's there's a big area too where The communities that just don't fit well on Facebook for whatever reason, right? And it's kind of nice to be able to have control over your own community Um, to either, you know, kick someone out that's being a problem or not kick someone out that Facebook is thinking is a problem.
Um, and so I think there's a, there's a, there's a big niche still. And I know this is crazy to people, to some people, but there's a huge niche for running your own software, having your own either server or, you know, I'm sure there's ways to put this on AWS or what have you, so that you don't have to have a physical box in your garage.
Um, but hosting it yourself is still a viable solution for a lot of us.
Julian: Definitely. And for a lot of enterprise customers, just the whole idea of content ownership, being able to control the narrative is a big plus. Another one is having your content indexable by search engines. You just don't get that when your content is on Twitter or Facebook.
Facebook specifically. Uh, Slack is another one. I mean, you're not going to find any of those, um, any of that content on Google. And let's say you have a support team that uses social media, which is great for reaching your customers, but then you'll be answering the same questions over and over again. And because your customers can't help themselves because the only avenue to reach you is through social media.
Yeah. To which you cannot look at the history, not easily anyways. Unless you want to break your fingers.
Jonathan: Yeah, well I can't tell you how many times it's like, I saw this person post something on Facebook, let's see if I can find it in 30 minutes. Never found the post. Yeah,
Jeff: it's buried. Well, I've got a question for you.
So, kind of going back to square one, how did you just wake up one morning and say, you know what, I just need to, I need to write forum software. This is my driving goal right now.
Julian: Um, well, back when I first started in the industry, I was doing, I was doing Facebook games, Facebook apps. So that was all the rage back then.
And, uh, we decided to, I ended up taking two of my colleagues from that company and we started our own, uh, consulting company. Doing Drupal stuff and WordPress stuff. And as it turns out, Clients are, clients suck. So, we wanted to, we wanted to do something on our own. And at the end of the day, right now, we actually do work with lots of clients.
So maybe I shouldn't say that too loud.
Jonathan: Not you guys. If any of my clients are listening, not you guys. You
Julian: guys don't suck. You're the exception. Yeah, we had an opportunity there, you know, between clients, to think about How we're going to fill our time and so we experimented with a lot of things and one of those things was Looking back at forum software and thinking, you know, could we do something on our own?
At that time discourse had just launched to great fanfare and we thought that was fantastic and there was a lot that Jeff Atwood was saying that It made sense to us at the same time. We didn't know Ruby and we didn't really care to learn it. So we decided to do it on node. js. That's all makes
Jonathan: sense.
Julian: Nice. Does it? Oh, good. Okay. I mean,
Jonathan: I would be more willing to figure out at node. js than I would be Ruby. I've tried to install a Ruby application before, and I think I ended up walking away in frustration. Um,
Julian: so I think that also happened. Um, but I'm not going to go into that. Okay.
Jonathan: All right. So you, you mentioned something that I think would be interesting to explore, and that is this idea of enterprise customers.
Do you, do you have enterprises that are, that are using
Julian: NodeBB? We do. And the majority of them use it in an internal capacity, or either, just not public. Right. So perhaps it's a, um, a backend for their internal customers to use. Mm hmm. Which It happens a lot more than you can think. Just because it's not exposed to the public net, you don't really realize that it's there.
And a lot of it is, uh, gated behind, um, User authentication. So let's say we've, one of our biggest customers is the largest bank in Singapore. Okay, and You know, you need to make account with them to access the forum, the community, which makes sense. Interesting. But it's all behind there. Yeah, and so they're using, they're using NodeBB and it's customized for them and it doesn't look like NodeBB at all.
But yeah, happy to use it, happy to have them.
Jonathan: Yeah. I imagine you also probably have, uh, instances where node BB is, is almost the, uh, the internal knowledge base, right? So like if it's a, a sort of a technical field and so you have the various texts and engineers and they need some place to be able to talk about things and have, you know, their conversation searchable, then that might be a nice fit as opposed to, uh, you know, one of the other, uh, one of the other solutions that you don't have as much
Julian: control.
The really interesting thing about NodeBB is that you can do a lot with it. Um, part of it being you could make it your knowledge base. And we did have a customer at one point who, uh, who used Node, who actually paid for, with our hosting, an enterprise customer who paid for our service, and then just didn't use the frontend.
It was just the backend with our API that they used. And they just programmed their own frontend because they wanted their customer support agents to be able to search, search for, Answers. Oh, interesting. So they built their own search engine, tied it into our database, and then that was that, and sure they could have gone with a hundred thousand other different solutions.
Right. But they went with ours, which was really interesting because they pushed our software in the direction that we, you know, we wouldn't have thought to go that way. And it's really interesting when we have enterprise customers because they've got really, really talented engineers who are Um, who are paid to do really weird things with our software.
Yes. And they push the boundaries of what we can do, and then they come to us and say, Your software is falling over, fix this. And so we're happy to, because it wouldn't be good if we, if we could, you know, if our software could
Jonathan: support this. Yeah. Now, what's the, what's the uptake on some of those, we can talk about these talented engineers, actually pushing patches back into the project.
What is, what is your, uh, your base of contributors look like?
Julian: Depending on the customer, um, Oh, it's, it's a typical refrain with open source software that is that we don't see a lot of those patches land back upstream. Um, if they are one of our customers, we push very hard for everything to be open source.
So, sure, there's going to be some private repositories for their custom theme, for example. Or, uh, a private repo for their logic that deals with their API. Because there's no reason why we'd need that public. But let's say You want something supported in NodeBB core. Um, but that's open source, so we're going to insist that it be open source.
Because the last thing I want is for you to fork the open source code and customize it. Because then I have to maintain that fork. And that's twice the work. So no
Jonathan: thank you. Now, NodeBB is what, GPLv3? Yes. All right. So there's, there's kind of this, um, various people have called it either working as intended or a loophole, um, but because of the way the GPL works, so if someone just deploys this on their servers, they don't have to release patches back even if people use it.
So is, have you, have you, have you thought about the AGPL?
Julian: Um, not so much because I, I don't, well, we've had, we've had discussions back and forth and whether we're going to go for AGPL or whether we're going to relicense as MIT even is something that we talk about every once in a while. Um. It's not really It doesn't concern me too much that some of those patches don't land back upstream because we do, you know It would be nice.
It would be nice to have but If they keep it on their own, it's okay. If you could if you deploy your own nodeDB software, you're not you don't have to Release the source unless you're selling your software in which case yes you do. I think that's the distinction. I could be mistaken
Jonathan: So the, the actual text of the GPL v3, if, if the software is running on the end users machines, which, because we have JavaScript running here, some of this gets weird.
Um, if it's running on the end user machine, then you have to make the source available, but if it's just running on the server, then you don't have to. And so that's, that is that conflict between the GPL and why the AGPL was written. But the problem with the AGPL is You know, you've got, you've got places like Google, they've got built into their corporate structure.
We do not use the AGPL for anything because they're, they're afraid it'll, it'll get in and essentially infect, to use that term, all of their internal code base. So it's, it's, it is a, it is a challenging, it's a challenging problem. Yeah,
Julian: we've, we've gone through that, uh, that process before where, you know, an enterprise customer will want to go through.
How are licensing every single one of our dependencies and look for some sort of conflict? I Think we're okay We have a lot of dependencies and a lot of dependencies have dependencies. So I don't actually know But I Luckily, it's been okay. I and if you know from a business Standpoint if switching to AGPL does mean we lose some customers.
That's not necessarily a good thing. So sure. I don't know I don't actually have an opinion on that right now
Jeff: Well, you talk about you know self hosting so I'm I'm sitting here and I decide, you know I'm gonna run the premier forum on fidget spinners or whatever Sure, and I'm gonna host it myself Is there a way to incorporate advertising into the forum software so I don't have to carry my own server load totally myself?
Julian: Uh, well because everything is Extensible through plugins. You can do a lot with plugins. We have, um, a lot of internal hooks, uh, that plugins can take advantage of. One of those being an AdSense plugin, which you can plug right in, and then you can just put ads wherever you want. You can put them on the side, you can put them on the top, you can put them in between posts if you like.
That works. And, I think there are other ones? To be fair a lot of our plug in ecosystem is entirely third party driven So people will have a need and then they write their own plugins and they publish it to npm and I don't hear about it So it could be there could be a lot Of you know different themes different plugins that I just don't know about because I don't hear about them There are literally thousands of
Jonathan: them.
Oh, wow, that's impressive. So I heard you I just say node BB core And that, that sort of terminology can mean one of two things. It can either mean that simply, well, we've broken this up to be modular, so it's easier to work with. Or, our core is open source, and then everything else is closed source, and you have to pay for it.
Yeah. So, No, it's the former. Okay.
Julian: Yeah, we, uh, Purely from a simplistic, simplicity standpoint, I wanted to publish a piece of software that you could run with minimal dependencies. I mean, it's, it's, I'm not gonna say it's heavyweight, it's pretty minimal as far as things go, objectively. But, uh, you know, you could load NodeBB, and You, you know, it does it, it comes bundled with a markdown parser, but that is technically separate.
You could turn it off if you'd like. Sure. If you're coming from a software that uses BB code, for example, which I don't know when the last time you heard BB code was, but we have a BB code parer as well. I, I still, so you could
Jonathan: swap one out for the other. I still have some BB code that's muscle memory
Julian: if you'd like.
I think you can even, I think there's a parser for wiki code if you'd like. Yeah. To write in that sort of, uh, dialect. That's fun. So we wanted to keep the core, uh, simple in that way. So you could swap out different, different, uh, segments of NodeDB. Um, if for example, you don't, there's no need to include the kitchen sink.
There's no need for us to support, you know, login via some arbitrary, not everyone wants Twitter login or Facebook login, for example. So why would we put that in core? So those are all available as plugins. If you want to connect to your own. A, uh, your own OAuth 2 endpoint, the bespoke user authentication back end.
You can do that through a plugin. Everything is plugins. Themes are plugins, technically. Okay,
Jonathan: so I'm, I'm very much reminded of the way WordPress works with this. I, uh, were you inspired by sort of the WordPress plugin? Um, Scheme, you said you guys worked with WordPress before this.
Julian: We did. Yeah. Very much so.
Uh, WordPress did a lot of things right when it comes to their plugin ecosystem. The fact that, you know, you could just search for what you want, install a plugin, and then it just works. Now the downside of plugins with Node. js is that if you install a plugin and it doesn't work, then your forum goes down.
But, you know, fingers crossed, that's less
Jonathan: of an issue. Um, one of the, one of the interesting things that the way WordPress does it is some of those plugins are paid. They have paid functionality, or you have to pay for them. I'm extremely curious. Is there that sort of an ecosystem now in NodeBB? Do you have a plugin store where some of those are paid only?
Julian: That is a very good question, and it's something that we might have pursued, uh, if we had more manpower, but we don't. We're actually a very small company. We started off with three tech developers, three tech guys, and now we have two, because one moved on. Sure. And, um, I think at the end of the day, we're better at building software than building businesses.
So the whole idea of a plug in, like a plug in paid, um Sort of store was something that we talked about, but it's just who's going to execute it Yeah, and who's going to take on the maintenance burden because these are all technical considerations Yeah, who's gonna take on the maintenance burden of this code base?
That you don't really want to maintain because No, BB core is orders of magnitude more exciting than dealing with a payment platform and dealing with a stripe API in this net Yeah, and so when it comes down to it People who use your software, your software is sort of your public face. And so if you're putting out bad software, then it reflects poorly on you.
And that's something that I found really interesting with open source software is that, Um, you're, you have this sort of, Drive to produce good software or better software than normal. And you should see the stuff that doesn't get published to RootSource because it is just a nightmare. Because I'm not accountable to only myself.
And if I can read it, theoretically, then it's good enough. Or it's good enough to launch. But then I can't do that on NodeBB. I have to commit something because someone will call me out on it and say, this is garbage code, what are you doing?
Jonathan: Yes. Um, let's see. So you, you, you made this, you made this comment that I think is, is very apt and that is that a lot of us that are coders are not very good at running businesses.
And that's very true. And I've seen that in several different projects I've been involved in, but I kind of want to ask how, how is that going? Um, what, uh, what does the revenue stream for, for you guys? Cause obviously you do this as a business. What does that look like? How do you make money with it?
Julian: Yeah, that's a good question.
So we, uh, we ended up, uh, incorporating in Canada and we serve clients all over the globe. And, um, so that's, so we ended up, we ended up making money. We keep our core open source and most of our plugins are open source as well. And, um, we sell support and maintenance and custom development. And that's where our main revenue stream comes in.
Oh, and additionally, our. Self service SaaS offering so you could just pay us and we can host the forum for you as well And so that's where that's where our revenue stream is and that's worked well for us We haven't taken on any Seat and sorry any additional funding besides an initial seed round, which we're actually actively paying back And so it's it's working.
Well, I think yeah, that's impressive. Obviously. We're not making money hand over fist, but That's okay.
Well, a lot of that comes back, comes down to the question of people asking, Hey, aren't forums dead? So, yeah, I guess. Maybe in the past, however many years, forum, a lot of forums are shutting down and they're either moving to Reddit or they're moving to Discord. But at the end of the day, forums are the easiest way to build a social network, your own social network, while controlling the data.
You can't really rule your own Facebook. That's just to say. And, you know, we've got a lot of people using what I like to call incumbent social media that are actively Hurting the user experience. So to use the words of, um, Cory, Dr. O they've been and shitified essentially. So we've got a, so I've got a quote here from a former Google software engineer, Ian Hickson, who put it very succinctly that decisions went from being made for the benefit of users to the benefit of Google, uh, to the benefit of whoever was making the decision and transparency evaporated and you could sort of.
You know, think that this is going on for not just Google, but, you know, for Facebook, a lot of these large companies, because at the end of the day, um, we've got, and we've got an algorithm that, um, it values engagement above everything else. And, you know, all the second order effects are ignored, you know.
We've got, we've gotten to the point where some people are saying that the only thing you can do is to not play the game, um, the game of social on the web, which. It doesn't quite work because the whole idea of humanity is about interconnectedness. And if the tools that we have right now aren't working, then let's find some new tools.
Or, in the case of us, let's find some old tools and make them new again. Yeah.
Jonathan: You know, you talk about that idea of a business making decisions for its own good rather than its users. And there's this kind of magic Goldilocks zone. And I think a lot of it has to do with people at the top of the business doing this on purpose.
But You get to the point to where those two things are aligned. And if you do something that's good for the business, it's also good for the users. And you make decisions that's good for the users, and it's also good for the business. And, and when you can run a business that way, well that's, that's when magical things happen.
Um. And, and there's, there comes a point, I don't know if it's inevitable for every business, maybe, um, but there comes a point to where those two things diverge. And it seems like once they start to diverge, they just wildly go in opposite directions. And sure. And I think it takes. Probably take somebody, somebody at the top with an iron hand to say, no, no, we're going to align these things back again, or so help me.
Once you go
Julian: public, that's when it happens.
Jonathan: I hope not. Maybe. I, I, I hope not. Last week we talked to Evan Upton about Raspberry Pi and they're about to go public. I hope you're wrong. Oh,
Julian: that's true. That's true. But, yeah, you can, you can have opinions all over the spectrum on this. I mean, you mentioned the whole, like, staying small, um, And that really reminded me of Errol Balkin, who was on your podcast recently, or fairly recently, I think.
Um, about, you know, small technology, and how keeping things small. And I like, uh, I love the whole idea that, you know, small teams craft better code. I like to say that. Whether it's true or not is a different question, but
Jeff: I, I kind of believe it, because I think sometimes the projects get so large that things get watered down, so if A programmer has a really good idea.
It might have to go through many layers of management before something can be approved versus smaller, flexible teams to customize what you need. But I mean, saying that, okay, I want to start, you know, or I've got a, uh, open source project. What, what would you tell me to do if I'm starting out and, or maybe I've got something that's just kind of off the ground a bit and
Jonathan: I need advice.
Julian: Yeah, I think when it comes to open source projects, let's say you are, let's say you've got some traction, you've got some usage. I personally, I think one of the best things I did, uh, I think it was five or six years ago was to start a bug bounty program because you don't know what you don't know. And you don't want your software if it's suddenly picked up.
Then you get hit by something that is, that basically kneecaps you and you think, Oh, how could you have let this slide for, I don't know, 5, 10 years? You know, you don't have to commit to it with funds. You could just send somebody a t shirt if they submit. But the whole idea of putting something out there and saying, We have a policy.
Here's how you responsibly disclose something to us. Let's work together to figure this out. As opposed to Relying on security through obscurity, which doesn't work out when you get more popular. And so we started a bug bounty program, I think it was 2016 or so? Um, and, wow, that's a long time ago. Don't do the math.
Don't do the math. Yeah, don't do the math. Um, and, you know, we've paid, we actually, we attached funding to it. Our own funding, because, you know, You know, we, at that point, we were making money, and even, even though it wasn't, even though it hurt when critical vulnerabilities were found, it's orders of magnitude better that we deal with it, we patch it up, and we put it out, and then it gets published online, and then we have to scramble to figure it out.
Jonathan: Yes, very, very, very much so. One of the, one of the things that I do is cover the security beat at Hackaday. And there is, yes, it is always much, it is much better to be able to tell people, Hey, by the way, this company found this, or it got reported to this company. There's no proof of concept out yet. It's fixed in the code.
Even better is when you can say, Hey, it's been fixed in the code for three months, and we're just now letting you know about it. Right. That's right. As opposed to, yeah, this is being used out in the wild right now. And if you're running the software, zero days, I'm sorry. You probably just need to plan on formatting your server.
Julian: And it's very. Very, uh, prescient in the sense that, you know, Bassadon and PixelFed very recently had their own, uh, critical security vulnerabilities come to light. I mean, they were, they were responsibly disclosed, which was very, very lucky for them because neither of those projects have bug bounty programs.
So the fact that the community itself was strong enough to Discover it, responsibly disclose it, and fix it for no money whatsoever is frankly just a miracle, like that everything aligned and that worked out okay, which is fantastic because at the end of the day, yes, we just want to, you know, produce and ship secure software, but you can't rely, you can't rely on that, and that's why I personally feel that a bug bounty program is something very important.
Jeff: Well, and I think that's wonderful advice, and I don't think I've ever. Really heard anybody running a project or very few I should say actually come out and say that and I think that's a great way to look at it is, you know, maybe a short term loss for paying out the bounty or yeah, sending out shirts or whatever.
But the fact you're encouraging people to communicate these issues and you know, people feel free to go understand that there's no harm. Nobody, you know, you're not going to go after anybody for finding a bug or anything, you
Julian: know, Yeah, we're not gonna call the cops on you opening your dev tools on your browser.
Yes. Yeah.
Jonathan: So, uh, this, this You call it a bug bounty, but, you know, just having a responsible disclosure process, even if that's just, here's the email that you send it to if you find something. That's right. I think every project, open source or not, that has a user base needs to have that. And, in fact, it's interesting, you see the, uh, some of the laws that they're working on in the European Union right now.
One of the requirements that they are going to start making for every software project is to have a responsible disclosure policy. It is about to be law in the European Union, at least, that that is a thing that you must do. Yeah, it's pretty interesting. Look, so the, I forget the name of it. I'm sorry, Simon.
I forget the name of this thing that Simon Phipps is covering. It's got some stuff in it that's great. It's got some stuff in it that's terrifying, but it's got some great stuff in it, too. And that's one of them. That's one of the ones that I like. So, we looked at the project ahead of time and there were some, there were some things that really caught our attention that was interesting.
And, and I think Jeff has a couple of these that he wants to ask about, but the one that really, It kind of gets me excited, like I love that you're doing this, and I think there was some funding that was attached to this, and that is, you're going to be on the Fediverse with NodeBB. Let's talk about that story.
Julian: Yes. Yeah. So I guess you can think about this as a continuation of FOSS Weekly 759 with Kevin Podromo. Yes, yes. Yes, so, um, the context of it, the whole context of it being that we've got Twitter imploding, depending on who you're talking to, and Reddit moderators frustrated with the administration team.
And we thought to ourselves, something that we've been telling ourselves a lot over the years is that we want to build something that no other forum software has. And I had this idea years ago, actually, that we wanted, that I wanted to expose content from, from NodeBB to other NodeBBs. Um, essentially a micro network forums talking to one another.
Hardly a new idea. If you think about web rings, that's been around for a long time too. So, you know, I started thinking about this more in depth and I started designing this sort of pseudo protocol in my head. And then, uh, Twitter happened and Reddit happened, and then I discovered Mastodon, and I discovered ActivityPub, and then it sort of all took over
Jonathan: from there.
There was this meshing of gears in your mind, like, I've been trying to figure out how to do this.
Julian: ActivityPub! It's already done, essentially. You know, the stated goals of ActivityPub align perfectly with what I wanted to do with interconnecting forums. And then there were several key advantages. First of all, was that all the protocol work was already done.
So I don't have to make all the mistakes because someone already thought it through. Uh, they did all the heavy lifting on how the communication would work, how the, you know, all the social aspects of it would work. And I'm already joining an established network. So, the Fediverse, as they like to call it, or the social web.
It completely blew my small fish dreams out of the water. And now I'm in, you know, I'm implementing this in a sort of big pond world. Yeah. How, so how, yeah, the how was answered. And so all that's left is to do it, right? So, you know, that's the step back. How, yeah, how can we, how can we benefit forum software with ActivityPub?
Because if there's no point in doing it, right? Um, the, the biggest stumbling block with a lot of communities, small communities, and by extension building products in general is just getting your first users. Yeah. Um, that's, you know. stereotypical chicken and egg problem, right? You don't have users unless you have good content and you won't have good content without users.
And so lots of different forums of different communities have. Um, different strategies. So some of them will just tie an RSS feed into topics, or they'll just post prolifically and, and they'll just share all the links. They'll just, you know, spread all the links on social media and hope that they get some, um, forum users that way.
And then of course, some people just, uh, make their own, they just fake it until they make it, they make some fake users and talk to themselves, but the problem remains is that it's hard to build a community from scratch and. ActivityPub is a potential solution. Yeah. It's also a fairly novel one. The whole idea of sharing content between sites.
Um, you know, right now you just have to copy and paste the URL onto, you know, whatever forum or so on. Um, but then the discussions are separate, right? The origin site, let's say Twitter, for example, won't know about the new discussion that I'm having on my forum. Right. And so you don't have, you know, you don't have that interconnectedness.
Uh, evident there, but with ActivityPub, you can actually take this a step further so I can, in a sense, import an existing discussion onto the forum and then everything is in sync through this protocol. So then I have my comments and replies that get propagated out to the other site, for example, and vice versa.
And that is a radical shift in, in thinking about growth hacking. Because the focus is less on acquiring users and, you know, with all the usual tricks like gamification and all that, but, you know, including the users as they are in your content and contributing back to the wider conversation. That is a completely novel approach.
And it upends the entire assumption that you need users at all to succeed. You know, you could have a forum that only has one user, just you. And you can still be an active participant in the social web. And it's perfectly fine. You can have a thriving forum. With just one user. That's completely wild to me.
Yeah,
Jonathan: in the same way that you can have a perfectly usable Macedon experience by propping up your own Macedon server and you are the only user on it. You can still interact with everybody else. Yeah, that's intriguing. So, how does Very interesting. What are, what are the ways, I'm still kind of curious about the nuts and bolts of this, like what are the, what are the ways that these two things work together?
Can I, can I come to a NodeBB forum with my existing Mastodon account and log in with that? Or can I follow a NodeBB forum conversation from Mastodon? What, what are the, what are the ways that these two things fit together?
Julian: It would be the latter. Okay. So you'd be, so the content from a no VB forum federates out to, uh, to the Fed.
So master on being one participant in it. Mm-Hmm. . So you'd be able to find a no VB user and follow them, and then you'd be getting their content in real time. Okay. As it's published on, no. So less so that you'd be able to go to an OB and log in with your Mastodon account. Okay. Although that is.
It's more, um, thinking of the software you use as a window into a wider network of content, and it doesn't matter that you're not on my forum. You can still participate in the discussions. Yeah,
Jonathan: and vice versa Can a Again, I'm on I use Mastodon. So that's why all my questions are Mastodon centric Sure Can can I follow a like a topic or an individual forum thread for Mastodon and get and get everybody's?
Words on it or is it limited to following people?
Julian: That's a very good question. So we have Mastodon is very Uh, post oriented. Right. So you make a post, you get replies to it, and so on. And the whole idea of having a conversation or a context, uh, of sorting things into a topic, is just Plain not supported in Mastodon.
I mean, it is in a way, but it's not very, it's not meant to be done that way. And so, the fact that NoteBB takes that idea and says, you know, you have a bunch of notes, you can build a relationship between the replies, the responses, and you can organize it into a topic is fairly new. Uh, I think, activity pub wise.
At least in terms of the implementers. We're not the first one to do it. Uh, it's just everyone compares us, compares software to Mastodon. Mastodon does not have topics. Right. But NodeBB does. And so there's a lot of, uh, there's a lot of, uh, different considerations we have to take into account in terms of how we How we notify users.
So a Mastodon user, for example, will never be notified of a response to a topic because the Mastodon does not have the idea of the whole concept of a topic. You get notified if you are mentioned, and that's it. Whereas forum software specifically, if you reply to a topic, you get notified of responses because you contributed to the topic.
It stands to reason. Uh, and that is an option that we support, but it's just, it's, yeah, so a lot of the, a lot of the quirks between implementations, that's where half the fun is with ActivityPub.
Jonathan: Yeah, so, so right now you're trying to sort of map the NodeBB experience onto Uh, onto ActivityPub, essentially.
Uh, I'm reminded of what you said about your enterprise customers doing weird things and how sometimes that pushes NodeBB. Uh, do, do we see this happening here with ActivityPub? Is, is any of what NodeBB is doing sort of pushing ActivityPub along? Have you had conversations with the, uh, Podromo and those guys about, wouldn't it be nice if ActivityPub supported this and this and this?
Julian: I don't have it right now. I don't have any enterprise customers pushing for activity, but this is completely on me and contingent on me getting funding from an all net, which I'd love to spend a couple minutes talking about actually, because. When it comes down to it, okay, I have this idea of interconnecting forums.
And I think, you know, joining this whole Fediverse idea would be fantastic, except who's going to pay for it. Right. Because if I spent, you know, hours and hours and days and weeks on it, I'm not getting paid for it. And so this is where, this is where NLNet comes in. Because the NLNet Foundation, um, gave us, gave me the runway to pursue this opportunity.
They, uh, they partnered with the, or they're working with the European Commission to start what is called the NGI Zero Commons Fund. And then they have, I think they've earmarked 21. 6, uh, billion euros? Billion? Million? I don't know. A lot of euros. In small to medium sized grants for, for R& D. of which this qualifies.
I was frankly surprised that it qualified, because I thought, you know, shot in the dark, I'll apply to this, uh, this grant program based in the European Union from Canada, which is not in the European Union, and we'll see where it goes. And then as it turns out, yeah, they love the idea, and they said, let's do it.
So, you know, they, uh, they want to build out open, sustainable, digital commons software for things like virtual and augmented reality. I'm reading here. Generative AI and intelligent mediators. So that's, um, specific to the NGI Zero Commons Fund. So
Jeff: now, is this in the core? Node BB software or is this like a add on that you
Julian: it will be yes, so For a lot of reasons and this goes completely contrary to everything I said at the beginning about plugins.
I It's it's very difficult to make activity pub integration a plugin because it integrates so deeply into the software At the same time we want to be able to turn off because not everyone wants to To have this software, so this is this sort of interconnectedness if you want to have your own internal, you know, knowledge base Why are you federating everything?
Federating everything? Yeah, right. It doesn't make any sense So we want to give people the opportunity to you know, turn on and off the functionality But yes, because it integrates so deeply with the actual database structure. So we had to put it in core. I Think at the beginning. I think it's always going to be Off at the start, and then you turn it on.
That may change.
Jeff: Well, when you were reading there too, and I almost hate to mention it, but I heard AI in there. Oh, that's what it is. What's the role of AI in NodeBB?
Julian: Oh, AI, that's a good question. Um
So I believe AI is going to be an inevitable addition to our digital footprint content everywhere. I honestly, I, I think I searched something online last night about reviews for something. And I honestly couldn't tell you whether the article I was reading was written by a human or not. Probably not.
Yeah. But what it means, what it means right now is that it devalues content. That's, you know, that's a net negative, sure. But you could look at it the other way, is that, if you have general content devalued because of AI, it increases the value of user generated content. At the end of the day, humans want to talk to other humans, uh, without a machine in between abstracting away the diversity of the human experience.
So, you know, it's not all do and gloom. Because as with a lot of technology, it's best used as an aid. Um, if you think about I'm just going to go out on a limb here and assume that you guys have watched star trek So how many star trek episodes hinge around a character like geordie laforge talking through a concept with the computer I think there's a lot of the episode.
Yeah, a lot of them where there's an episode where uh Picard is talking to Data, and he goes to theorize Data, about the whole idea, about how it could be that you have a spacefaring group of colonists that have spinning wheels in their cargo hold, right? He couldn't, as a, you know, as a human, Captain Picard couldn't, couldn't mesh those two concepts together, but then he turned to, um, you know, Data.
An AI in a sense and had them theorize and it's a whole, it was a wild idea back then because everything at that point was, you know, computers are tools we have, we have calculators, we have computers, you have word processors, we've got tools that are, you know, you put something in, you get something out, uh, but it is what you put in, but it has, it has huge implications if you consider AI as yet another opinion To your thinking process But Studying back.
So within a forum context, I predict that we'll see a push for sites that have only user generated content How we get there? I don't know But we might have islands with firewalls against AI content because not that it's not that we don't want it It's just in certain contexts. Maybe it's unwelcome. Yeah
Jonathan: You know, when I think about social media and I think about machine learning, the only place that it makes sense, like an algorithm at all, the only place that it makes sense is for discovery.
And so, you know, on Twitter or Facebook, whatever, when occasionally I get the thing that says, Hey, you followed this person. Here are some other accounts that you might be interested in like that. That's okay. That's good. I am okay with that. Or, you know, when you go to YouTube, let's say and YouTube knows all the things that you've watched and you go to the homepage and then you then get suggestions.
You've watched content like this before. So here's a new video that you might be interested in. Like that, that sort of discovery makes sense in a lot of these contexts. I could see, I could see that having a place in Mastodon. You know, some servers would have some sort of algorithm turned on that would then say you have followed these Macedon handles or maybe even in a forum, maybe even in a forum.
You're interested in these topics. We just want to let you know here's this new thread about one of those topics like that makes sense. But I don't, I don't really ever see a time when I'm going to be terribly interested in machine generated forum posts. I just, I can't comprehend that being that interesting.
Jeff: Well, I had a little thing at work where somebody, somebody brand new, young, young kid, sent an email that basically said, I'm done with this project, and then I'm taking, I'm taking lunch. And it was like three paragraphs long, and just, it was like, oh my gosh. It's like, I was, he wrote it with ChatGPT and I'm like, yeah, I don't do
Jonathan: that.
Oh, so I saw something. It was hilarious. This idea of somebody doing that. And then on the other side, there's this idea that you can also use ChatGPT to condense several paragraphs down to the bullet points. So it's like. We are, we are soon approaching a time where we use, we type bullet points. We use chat GPT to turn it into two paragraphs of prose.
And then on the other side, they use chat GPT to turn it back into the bullet points that we started with. It's like, why, why are we, why is this, why is this where we're at as humanity? What, what, what mistakes were made that brought us to this point?
Julian: Hey, at some point you can just send us an entire podcast to chat GPT and they'll just summarize it for you in bullet points.
You won't have to listen either. We
Jonathan: actually, we actually use. Service that turns it into a text that, that transcripts it. And then I know we at least, well, and then I know we have at least one user that will then feed that into an AI and get the short version of it to be able to get it in just a few minutes, rather than listening to the whole thing.
Julian: All right. So within the, within the forum context, though, I think there's the expectations that. Recency is what you're going to get. So every, the most recent topics are on top, right? And it looks wrong if it's subverted, but something that we can experiment with. You know, the whole idea of resurfacing content, uh, because of high engagement.
Of course, if you start doing that, then it opens a can of worms as to what qualifies. And so, you know, maybe we're not quite there yet, but we'll see. Um, the main, the main thing is that. Stuff gets missed when you sort stuff by time, you know, uh, I can be using Mastodon and all the stuff I'll see is from people who tend to post when I post, you know, I won't see a lot of content surface from Europe or from Asia because I'm asleep when they're active, right?
So that's, uh, definitely an issue.
Jonathan: One of the
Jeff: features I liked when I was looking at, I looked at for a list of, uh, forums that I could get on the, so I could just see what node BB looked like. You know, kind of going back to the more traditional forums. I like that, like, for example, one of them had, uh, gaps between the, uh, replies where you'd say, Oh, two years.
And then the next one, or because I'm on some. Regular type, you know, say motorcycle forums and somebody will they call it zombie
Jonathan: a thread necro thread. Of course, yeah necro
Jeff: So I like that that was pretty easy to see it's like wait a minute this is this thing
Jonathan: is 10 years old, you know maybe I better repost or And another feature I saw I thought was interesting was you could I found one where that people
Jeff: were forking
Jonathan: threads
Jeff: So you had a topic And then somebody would, oh, they forked it because the conversation, you know, sometimes threads kind of wander around and yeah, and it was easy to go, Hey, let's just take this off to another thread kind of on this side topic while continuing on the main topic.
And I hadn't seen that before in forum software.
Julian: So, yeah, the whole idea of forking threads is. Well, I'm not going to say novel. It's just been around for a while now. But it wasn't, it just wasn't supported in those old softwares. And so you'd have, um, the whole forum user experiences. People yelling at each other to stay on topic.
Because if you, you know, if you, uh, what is it? If you go off the rails or whatever it is. Then, you know, you lose the whole context of the original discussion. And then again, there are some forums that completely do this on purpose. Um, One of our, oh, they're actually not one of our customers, but one of our users, the Daily WTF, loves to do that.
A bunch of trolls on the forum. And so you'll start a, you'll start a forum topic, it'll go on for like 900 pages. And then they'll go through 900 different topics in the interim and they don't care at all. It's just how, it's just how it is.
Jonathan: Well, that's one of the, that's one of the beautiful things. We talked about this a little bit earlier, but it's one of the beautiful things about being able to Host your own forum if you if if you have a if you have a group of users that enjoy that sort of discussion Enjoy being kind of trolly to each other.
That's fine. It's your server. It is your forum knock yourselves out I think it's one of the beautiful things about these sorts of solutions and I do know what you mean
Jeff: about trolls Yes, because I've been on forums where here's how you started. Here's how you fix a 69 Roadrunner carburetor And then you jump to post 300 and they're talking about, you know, home canning or something like, wow, it ran off the rails.
Yeah.
Julian: Automotive forums specifically are fairly, uh, they're fairly popular still. I think, um, any, any new car model comes out, there's going to be a forum for it within days. And it's just, I don't know, there's one for each of my cards.
Jonathan: Yeah, I'm curious, this idea of forking threads, I hadn't seen that, it's really clever.
Is that, is that part of core, or is that a plugin, an extension on top? That
Julian: is part of core, that is part of core. It was useful enough. that even if you don't use it, I think the, it's fairly simple enough because you just take, because the way we structure it is that you have categories that contain topics and you have topics that contain posts.
And so what is forking than just taking a bunch of posts and putting it in a new topic? That's all it is. So it's not necessarily a hard thing to do. So we put it in core.
Jonathan: Yeah, that makes sense. That makes sense. All right. So we talked about the bug bounty and I know there is at least one bug that was pretty notable that got found through that bug bounty.
Let's take a minute and talk about that.
Julian: Oh. Actually, I have two. You have two.
Jonathan: Well, I said at least. At least one. Two is at least one.
Julian: Yeah, we need one. Yeah, we, uh, I, okay. Yeah, I don't like to, to broadcast the fact that we had critical, critical vulnerabilities in NodeDB, but. It happens. You know, this was, this was disclosed to us through our bug bounty program and we gladly paid the top dollar amount, which is not a lot, but it was a lot for us.
Do
Jonathan: you mind telling us how much the, the top, the top value is?
Julian: Top, I think it's 512. I think we doubled that, 1024 for this one. Okay. Of course we use, you know, in multiples of two because we're total nerds. Of course. I love that. So, uh, this specific vulnerability centered on our utility function for generating UUIDs.
Okay. And I'm going to say something that I'm embarrassed by in that. Our function for generating UUIDs was stolen from Stack Overflow in 2013. The question, the question was originally asked and answered in 2010. And I stole it in
Jonathan: 2013. I must admit, my code, my code has comments of Stack Overflow links.
Because that's what, that's what the license for Stack Overflow says. It's, it's licensed MIT or whatever, but there's this one modification that to be able to quote it, all you need to do is include a link to where you got it from Stack Overflow. And I have that. All over the place with my code.
Julian: And so, and so this, uh, I think it was like four lines, this little piece of code, completely black box.
I don't know what the heck it does. It was updated in 2015 because to address the fact that math dot random in JavaScript is not actually random. It doesn't have uniqueness guarantees specifically. And so funny thing about that, that happened in 2015. I stole the code in 2013. I was never updated that this changed.
I was notified in 2022 that this was an issue. So an analyst was able to use a specially crafted script to repeatedly call our password reset route, which uses that UUID generation. And he was able to programmatically determine the reset code of another user's account. Like an admin. And so, um, so that's account takeover, uh, no user intervention.
That's 10 out of 10 critical severity.
Jonathan: That's bad. Full bounty. That's real, real, real bad. That falls in the real bad category.
Julian: Real bad category, yeah. So when we, when we just, when we stepped through the specific logic, it was completely wild how they managed to do this. It was just chaining different vulnerabilities, uh, and making all the holes line up, until they could, you know, take over an admin account.
And that's why we have a bug bounty program for stuff like this.
Jonathan: Yes. So you said there was two. That's one of them. What was, what was the other wild one?
Julian: Nah. The other one was an object prototype vulnerability. So, JavaScript objects have a, uh, have a bunch of properties that come with it. Right? And so, in our code, we did a naive check, uh, to see if a property existed.
Just a truthy check. Because truthy is a word that only exists in Javascript, by the way. Ha ha ha ha ha. Well, actually, I think it exists elsewhere, but It's a few other languages, but yes. So a bad actor was able to use this oversight to set a value, because I think constructor is one of the values, and constructor.
assign is one of the methods that you can call. So, uh, they used this to Set one of the variables on the server side that we persisted between calls. One of those variables is the user ID. So, um, they were able to make this specially crafted call to overwrite the user ID to an admin. Privilege escalation, no end user involvement, 10 out of 10 severity, full bounty payout.
Yes,
Jonathan: yes, also in the real bad category. Yeah, fun
Julian: times. Yeah, those were fun ones. Again, just things that you don't normally get bug bounty reports about. And it's just, you know, you spend a day working on this, your mind is blown by how something, the end actual fix was one line. When we, you know, when we instantiated the object, instead of just using curly brackets, you use object.
create. One line. Yep. Thousand dollars. Yep, that's, yeah, that's
Jonathan: pretty typical. That's pretty typical. Alright, so let's see. Um, we are just about out of time, which is unfortunate because it's been a fun conversation. Um, I want to ask a few closing questions and let's go with this one first. Uh, what's the weirdest or most surprising thing that you've seen someone do with NodeBB?
I imagine there's a lot of these and you're now trying to figure out which one is the most interesting.
Julian: Yeah. No, there's been a lot of weird stuff. I think that the weirdest one is just when we just, like I mentioned earlier, when they, when they, um, came up to us and said, yeah, we're, we're going to just not use your front end.
We're just going to use you as an API. I think at that time we actually didn't have an API. A public API, it was just sort of, they reverse engineered our entire API and they built a front end on top using their own front end tools, which was frankly insane. Um, and we've got people talking on our community forum right now.
It comes up every now and again that people want to use their own. frameworks, um, instead of our own weird, you know, jQuery who, uh, frame on the front end. And so they want to build their own front end and they want to decouple the back end from the front end, which is possible, just fairly difficult to do.
Um, and so people are working on that independently of us, which is, which is always exciting. Are
Jonathan: there any websites to do something fun, like use NodeBB as the comment section for individual articles?
Julian: Oh, that's not weird. You can do that. Yeah. Yeah, we actually have a plugin for it called nodeDB plugin blog comments.
Nice. Yeah, I like it. Although with ActivityPub you won't actually need to do this anymore. You can just plug it into the Fediverse and then you have your comments. Cool. That's
Jonathan: cool. Alright, so is there anything that we neglected to ask you about? Is there anything you really wanted to cover that we didn't get to?
Julian: Oh, I can go on at length about how social media has failed us, but that's a conversation
Jonathan: for another podcast. We got into some of that. We got into some of that. All right. So last two questions I've got to ask you, Ben, or else people send me emails. What's your favorite scripting language and text editor?
Julian: Oh. I'm going to get hate mail if I say JavaScript, isn't it? Nah. Probably. You can say JavaScript. I expect you to say JavaScript. I love JavaScript. Yeah. I mean, with all its warts and, you know, eventually we might end up moving to TypeScript. We're having those conversations, long running conversations. The best conversations about moving to TypeScript.
Um, as for an IDE, I personally use VS Code, but it would be unwise for me to not mention Notepad because they're actually one of our customers. Ah. Um. Yeah, Dan, Dan Ho. What an interesting, interesting fellow. He, uh, I don't know if you remember a couple years back, he, um, He gets a lot of hate mail for his software, and then he, uh, He basically put out a form saying, If you want a refund for your software, just put your name on this form.
Of course, the software being free. I don't think the form went anywhere, it's just When you have a developer with a sense of humor, it's always very exciting. Yes, yes,
Jonathan: that's right. That's fun. Uh, we, I forget who it was, somebody made the point a long time ago on, on Lost Weekly that you, JavaScript was terrible when it started out, but because you have had, you know, the Microsoft implementation of JavaScript and the Firefox and the Google, and now the Node.
js, the overlap of what all of those different pieces of software support, that is what JavaScript has become, and that's actually okay. Like, that's become pretty decent over the years.
Julian: I think you can build pretty good software on Javascript. I, well, apparently. I mean, apparently. I mean, I have a copy of Javascript, the good parts.
It's, you know, a book this thick. But, uh, yeah. I still refer to it from time to time. Yeah, there you go. Or we're calloused
Jonathan: up. Okay. Alright, well, hey. Thank you, sir, very much for being here. We sure appreciate it. It was a fun conversation to have. Appreciate you being here.
Julian: Thank you very much. Happy to be here.
Jonathan: All right. What do you think? Jeff?
Jeff: I think, uh, that software is really cool. It's, it's, it does take so much the forum software that we've had for I'll say decades. For those listening, I've got a pretty white beard so I've been playing around with this stuff for a long time. As we said, don't do the math.
Yeah, don't do the math. And, you know, it really, like, the, the You know, the, the Fediverse, the, you know, the ability with all the different plugins, the, um, forking showing how long between replies. I mean, it really, I think it's really innovative and doing something that on all the forums I'm on, I don't, you don't see any of that.
It's kind of the standard. Somebody posts a topic and people put, you know, replies under that. And I mean, there's even stuff like I'll, I'll get to the bottom. And there's no button to go up or something, you know, I'm like, really? I mean, some basic type features that just aren't existing that you say. Why, who didn't think I'd want to scroll up, you know, I don't, I don't want to use the mouse wheel to go up or have to grab the border, you know, where's, where's my button
Jonathan: to go all over, you know, yeah, yeah, no, it's fun.
I'm, I'm glad there are, there are people in projects out there that are sort of bringing this idea of the forum, uh, into the future with us, um, because there's, there is something, there is something special. I think about the way forums work that none of the other solutions really, really quite capture.
Um, so that's cool. And then that they're, they're integrating with the Fediverse that just, um, That just makes my, uh, decentralized, uh, kind of almost anarcho capitalist, decentralized nut inside of me get really, really happy. I like that part. Well, and I think
Jeff: forums are going to be around because honestly, I think that's one of the best ways to catalog information by various threads.
And you can go into them because like we talked earlier, you look at Facebook and try to find something or, you know, Twitter, you scrolling around, it's like, oh my gosh, good
Jonathan: luck. Yeah, no,
Jeff: and especially when the algorithms are playing around and oh, you haven't seen this. Let me shove this in. It's like, no, I'm trying to look at what I had before.
And you can't. We're we're a forum. It's all right. They're easily, you know, searchable indexed.
Jonathan: Organized. Yep. Absolutely. Absolutely. All right. Well, very fun. We will have to, uh, maybe we'll have him back when the, uh, When the Fediverse stuff is finally fully cooked We'll have him back and talk about how it works in the end and come up with some new ideas for how to How to do new fun things Um, so that'll be great.
I want to let you know next week. We have Herbert Wolverson and we're talking about Rust Maybe I will get a crash course in coding Rust Maybe I'll do some Rust coding live on the stream that would That'll be, that'll be fun. That'll be interesting. Um, but yeah, that is, uh, that is next week. I'm looking forward to that.
Jeff, you have anything you want to plug before we go? Uh, if
Jeff: you enjoy me, just catch me over at the Untitled Linux Show. I'm
Jonathan: there almost every week. Yeah, and uh, ULS now has a free to the public audio stream. And of course, if you want the video, if you want to be part of the live chat, that is on the Twit Discord, which is part of Club Twit.
Which is, uh, a lot of fun. Um, as far as me, you can find my work also at Hackaday, with the security column, goes live every Friday. I'd love to see you there. Uh, and then I've also got a YouTube channel. Doesn't, there's not a whole lot going on there, but we just recently did a couple of Mesh tastic videos with some more to come.
And so, uh, that's a lot of fun. You can check that out. Find me over at, uh, on the YouTubes. Well, thank you everyone for being here. We had a few live in the chat. Appreciate that. And for everybody on the download, and we will see you next week on Floss Weekly.